Organik gruplar için group_audience gibi bir formdaki alanlara erişimi gizleme ve / veya engelleme


9

Bu bir süredir beni rahatsız ediyor .. Grup izleyici alanı veya yayımlama ayarı gibi alanları bir formdan gizlemeye çalıştığımda, doğrulamada form varsayılan olarak bu alanın her ikisini de null değerine ayarladı. doğru beyan edildi.

Görünmez, #access, unset gizli kullanmaya çalıştım hiçbir şey çalışmıyor! Bu çok sorunlu çünkü şu anki proje kullanıcılarım, o anda profillerinin yalnızca küçük parçalarını, örneğin sadece adresi veya resmi düzenleyebilirler, bu yüzden grup kitlesini gizlersem, kullanıcı ait olduğu gruplardan dışarı atılır. Düzenle.

Ben hala kullanıcı kendi grubunda tutarken bu alanı gizlemek için aşağıdaki kodu kullanarak sona erdi.

$variables['user_edit_about']['group_audience']= $temp['group_audience'];       
$variables['user_edit_about']['group_audience']['#prefix'] = '<div style="display:none;">';
$variables['user_edit_about']['group_audience']['#suffix'] = '</div>';

Bunu başarmanın daha iyi bir yolu var mı?

Teşekkürler


Bu cevap mükemmel değildir, çünkü kullanım DOM manipülasyonu ile değeri hala değiştirebilir
iStryker

Yanıtlar:


6

Düzenle:

Tamam anladım. Bunu özel modülünüze koyun:

function example_form_alter(&$form, &$form_state, $form_id) {
    if($form_id == 'story_node_form') {
        $form['title']['#value'] = 'hot stuff';
        $form['title']['#access'] = FALSE;

    }
}

Bu, hikaye düğümünün başlığını 'sıcak şeyler' olarak ayarlayacak ve #access = FALSE;

Hook_form_alter () içine daha fazla ayrıntı düzeyi denetimi ekleyebilirsiniz.

  global $user;

  // Check to see if $user has does not have the administrator role.
  if (!in_array('administrator', array_values($user->roles))) {
    $form['title']['#access'] = FALSE;
  }

Bu Drupal 6 ve 7 için geçerlidir.

Eski Yanıt (yoksay):

Ben böyle bir şey yaptım beri bir süre oldu, bu yüzden yanlış olabilir. [#value]Bir form öğesini ayarlarsanız, formda görünmez.

Bunu Drupal 6'da hook_form_alter()özel bir modülde yaptım . Drupal 7'de çalışıp çalışmayacağını bilmiyorum ve bir önişleme işlevinde yapıp yapamayacağınızı bilmiyorum


Cevabınız için teşekkür ederim, ne yazık ki benim durumumda işe yaramadı, ancak form alanları zaten formları düzenlendikleri için önceden # değerine sahip
silkAdmin

@silkAdmin Lütfen yeni düzenlemelere bakın
iStryker

Bu konuda kazmak için zaman ayırdığınız için teşekkür ederiz Stryker, yukarıdaki teknik çalışma alanları gizlemek olsa da olay, varsayılan değerin gönderildiğinde de dikkate alınmadığı görülüyor. Bu yüzden kullanıcı hala her profil düzenlemede kendi gruplarından tekme ile sona erer. Şimdiye kadar sadece #prefix # sonek hilesi normal davranmasını sağlıyor.
SilkAdmin

$ form ['title'] ['# value'] = $ form ['title'] ['# default_value']
iStryker

5

Form öğesine 'element gizli' CSS sınıfını da ekleyebilirsiniz

$form['user_edit_about']['group_audience']['#attributes']['class'][] = 'element-hidden';

İStryker'in daha önce de belirttiği gibi, değeri DOM manipülasyonu ile değiştirmek yine de mümkün olacaktır. Ancak, bu bir form alanını (veya başka bir oluşturma öğesini) gizlemenin güzel ve kolay bir yoludur. element-hiddenSınıf tanımlanır system.base.css.


Dostum, beni kurtardın. Teşekkürler. Gördüğüm diğer tüm yöntemler formun kendisindeki öğeleri çıktılamıyor. Benim durumumda, form öğelerini formda olmasını bekleyen bir katkı modülünde gizlemek istiyorum, aksi takdirde düzgün çalışmaz. CSS düzeltmeniz istenmeyen öğeleri gizler, ancak her şey hala çalışır. Bunun "hacker korumalı" olmadığını ve yalnızca ihtiyacınız olan her şeyin güvenilir editör kullanıcılarına sunduğunuz arayüzü basitleştirmek olduğunda işe yaradığını da belirttiğiniz için teşekkür ederiz.
Mario Awad
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.