Apakah mungkin membuat halaman "edit akun" kedua yang hanya memungkinkan pengguna untuk mengedit beberapa bidang profil?


14

Jadi inilah situasi saya: pengguna di situs saya harus mengisi sejumlah besar bidang pada saat pendaftaran. Namun, setelah mereka mendaftar, hanya empat (dari sekitar dua puluh) bidang ini yang perlu diubah secara teratur. Saya ingin membuat halaman "edit" yang terpisah untuk memungkinkan pengguna memodifikasi hanya empat bidang ini agar semuanya tetap sederhana.

  • field_checkbox_a
  • field_checkbox_b
  • field_checkbox_c
  • field_checkbox_d

Semua bidang ini terdapat dalam grup bidang, jadi idealnya halaman tersebut akan menampilkan grup bidang ini, empat kotak centang di dalamnya, dan kemudian memiliki tombol kirim dan batal, itu saja.

Saya ingin melakukan ini sebagai halaman terpisah, bukan pengeditan di tempat seperti modul Edit Cepat .

Pengguna masih harus dapat mengakses halaman edit akun asli untuk mengubah zona waktu, alamat email, dll. Tetapi saya benar-benar dapat menggunakan layar terpisah untuk memungkinkan mereka mengedit opsi akun yang paling umum.

Jawaban:


8

Saya memiliki situasi yang sama sebelumnya dan menanganinya dengan kekuatan penuh fitur druapl hook_form_alter , kami memiliki 2 formulir untuk pengguna, pendaftaran dan edit pengguna

  • user_profile_form (dalam penyuntingan)
  • user_register_form (dalam pendaftaran)

Kami hanya perlu menyembunyikan bidang yang Anda tentukan dengan cara edit Jadi di modul khusus Anda

function yourmodule_form_alter(&$form, &$form_state, $form_id)
{
    global $user;

    if ($form_id == "user_profile_form") {
       // ym($form);
       // you also can perform this action for specified roles 
        //if (!(in_array('blogger', $user->roles) || in_array('administrator', $user->roles))) {
            hide($form['field_mytest']);
            // hide other field with this method
        //}
    }

}

Setelah bidang itu ada dalam pendaftaran seperti yang Anda lihat di bawah

masukkan deskripsi gambar di sini

dan tidak ada (sembunyikan) dengan cara edit

masukkan deskripsi gambar di sini

Anda juga dapat membuat mereka hanya membaca alih-alih menyembunyikannya$form['field']['#access'] = FALSE;

Dan solusi lain menggunakan modul izin lapangan

Modul Izin Bidang memungkinkan administrator situs untuk mengatur izin level lapangan untuk mengedit, melihat, dan membuat bidang pada entitas apa pun. Fitur:

  • Aktifkan izin bidang pada entitas apa pun, bukan hanya simpul.
  • Izin bidang berbasis peran memungkinkan pola tampilan yang berbeda berdasarkan pada apa yang dimiliki pengguna.
  • Izin tingkat penulis memungkinkan tampilan dan pengeditan bidang berdasarkan siapa pemilik entitas.
  • Izin untuk setiap bidang tidak diaktifkan secara default. Sebagai gantinya, administrator dapat mengaktifkan izin ini secara eksplisit untuk bidang di mana fitur ini diperlukan.

Sebagai fitur yang disediakan modul ini bagi kami pengguna anonim (pengguna yang tidak dapat mendaftar dapat mengedit bidang tersebut dan hanya melihat pengguna yang mendaftar (hanya dengan cara baca).


6

Alih-alih memiliki dua formulir, Anda dapat menggunakan yang standar, dan menambahkan kotak centang "Tampilkan semua pengaturan", seperti yang berikut.

$form['show_all_settings'] = array(
  '#type' => 'checkbox',
  '#title' => t('Show all settings'),
);

Kemudian, Anda bisa mengubah bidang formulir yang ingin Anda tunjukkan ketika kotak centang dipilih, dan sertakan properti berikut untuk bidang formulir tersebut.

'#states' => array(
  'invisible' => array(
   ':input[name="show_all_settings"]' => array('checked' => FALSE),
  ),
),

Dengan cara ini, pengguna akan dapat beralih antara formulir yang menunjukkan semua pengaturan, dan formulir yang menunjukkan set minimal pengaturan, tanpa berpindah dari satu halaman ke halaman lainnya.

Referensi


5

Anda dapat menggunakan modul Profile2 untuk itu.

  • Buat tipe profil atau gunakan profil utama default.
  • Tambahkan bidang-bidang itu ke jenis profil itu dan atur agar ditampilkan di formulir pendaftaran.

Sehingga bidang-bidang itu akan tersedia pada formulir pendaftaran di antara bidang-bidang lain dari akun pengguna . Tetapi untuk mengedit bidang-bidang itu, pengguna harus pergi ke halaman edit profil daripada halaman edit pengguna .


Saya ingin menunjukkan empat kotak centang pada halaman edit pengguna dan halaman kustom mereka sendiri; Saya tidak ingin menghapusnya dari halaman edit pengguna utama.
Patrick Kenny

1

Coba modul VBO , Anda dapat membuat halaman VBO, menambahkan hubungan USER dalam tampilan, menambahkan bidang-bidang yang tersedia bagi pengguna untuk mod, mengatur Izin. Pastikan Anda memilih konten "milik" hanya oleh pengguna CURRENT (melalui Filter Kontekstual)


Bagaimana saya bisa mengizinkan pengguna untuk mengedit bidang ini? VBO memungkinkan saya menampilkan nilai-nilai, tetapi saya ingin mereka dapat diedit.
Patrick Kenny

Tambahkan bidang vbo lalu centang operasi 'ubah nilai entitas' (sesuatu seperti ini, tidak dapat mengingat apa tepatnya namanya)
gilzero

Terima kasih, ini disebut memodifikasi nilai entitas . Sayangnya, ini tidak berfungsi untuk kasus saya, tetapi ini mungkin solusi yang bermanfaat untuk orang lain.
Patrick Kenny

1

Berdasarkan jawaban zhilevan untuk pertanyaan ini dan pertanyaan ini serta diskusi di drupal.org , berikut adalah kode aktual yang berfungsi untuk saya:

function MYMODULE_menu() {
  $items = array();
  $items['user/editpurposes'] = array(
    'title' => t('Change your purposes'),
    'page callback' => 'MYMODULE_purpose_edit_form',
    'access callback' => TRUE,
    'access arguments' => array('access content'),
    'description' => t('Purpose Edit Form'),
    'type' => MENU_CALLBACK,
  );
  return $items;
}

function MYMODULE_purpose_edit_form() {
  // Needed to load AJAX.
  module_load_include('inc', 'user', 'user.pages');
  global $user;
  $account = user_load($user->uid); // Load a user object
  $form = drupal_get_form('user_profile_form', $account, 'account', 'purposes');
  return $form;
}

function MYMODULE_form_user_profile_form_alter(&$form, &$form_state) {
  if(isset($form_state['build_info']['args'][2]) && $form_state['build_info']['args'][2] == 'purposes') {

    // Remove name, email, password, etc.
    $form['account']['#access'] = FALSE;
    // Remove language.
    $form['locale']['#access'] = FALSE;
    $form['timezone']['#access'] = FALSE;
    // Remove various custom fields.
    $form['field_acc_displayname']['#access'] = FALSE;
    $form['field_acc_code_agree']['#access'] = FALSE;

    // Needed to load AJAX.
    form_load_include($form_state, 'inc', 'user', 'user.pages');
  }
}

dapatkah saya bertanya mengapa Profile2 bukan pilihan, seperti yang saya sarankan dalam jawaban saya?
Елин Й.

0

Saya pikir Anda harus bisa sedikit merapikannya dengan modul grup Field , misalnya meletakkan bidang di bawah tab yang berbeda. Yang umum di bawah satu tab dan sisanya di bawah tab lain.


Terima kasih atas ide ini, tetapi saya sudah menggunakan modul Field Group. Itu bagus tapi saya benar-benar hanya ingin menunjukkan empat opsi kepada pengguna, bukan segalanya.
Patrick Kenny

0

coba kode ini. dan sembunyikan bidang lain yang tidak ingin Anda tampilkan.

<?php
global $user;
$user=user_load($user->uid);
module_load_include('inc', 'user', 'user.pages');
$user_form = drupal_get_form('user_profile_form', $user);
print(drupal_render($user_form));
?>
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.