hook_form_alter çalışmıyor

4 Cevap php

Drupal 6,16 kullanarak Im. Hook_form_alter için aşağıdaki kod çalışmıyor. Im sadece kullanıcı giriş formu gönder düğmesine 'Sign In' için 'Üye Girişi' değiştirmek için çalışıyoruz

<?php
//$Id$

function helloworld_form_alter($form_id,&$form) {
  switch ($form_id) {

      case 'user_login_form':

    // Change 'Log in' to 'Sign in'.
    $form['submit']['#value'] = t('Sign in');


      break;
  }
}

Bunu düzeltmek için herhangi bir şekilde?

Please help. Thank You.

4 Cevap

two errors kodunuzu vardır:

  1. Sizin function signature is wrong, zaten hfidgen (+1) ile dikkat çekti. Bu örnekte form kimliği üzerinde anahtarı tetikleyecek asla böylece, yourModuleName_form_alter(&$form, &$form_state, $form_id) olması gerekir.
  2. You check for the wrong form id. There are two form ids you need to check in this case, and both are different from the one you're using:
    1. user_login_block (genellikle en sayfalarında kullanılan) bir blok olarak mevcut küçük giriş formu
    2. user_login açık giriş sayfası için (genellikle 'user / login' altında bulunur)

Her iki form yapısında çoğunlukla aynıdır, bu yüzden genellikle aynı hook_form_alter uygulama içinde hem de değiştirebilirsiniz - sadece ikinci sürümünü kontrol etmek için başka bir dava deyimi ekleyin.

Ben daha kolay formları değiştirmek için tema fonksiyonlarını kullanmak bulabilirsiniz - temanızın template.php sadece bu oluşturun:

function YOURTHEMENAMEHERE_user_login_form($form) {
    $form['submit']['#value'] = t('Sign in');
    //dsm($form);
    return drupal_render($form);
}

Ben de kurmanızı tavsiye ederim hangi - çıkış yorumladı hattı (DSM) için Drupal devel module olduğunu. Bu yüklü ve bunu kullanın böylece yönetici rol izinlerini ayarlamak sonra, sayfa inşa ve hangi diziler ne yapacağını tam olarak nasıl gösterir yeni bir sekme alırsınız.

Diziler içinde iz takip ve sitenizde oldukça fazla tema şey yapamam.

EDIT - oh tamam: P daha önce bu kancayı kullanılan sahip değil ben fark tek şey, API örnek işlevi 3 değişken olmasıdır, ancak 2 var! Bir uyumsuzluk olması muhtemelen yanlış değişken beslenen demektir:

function modulename_form_alter(&$form, $form_state, $form_id) {
  switch ($form_id) {
    case 'contact_mail_page':
    $form['submit']['#value'] = t('Sign in');
    break;
  }
}

Böyle önemsiz bir değişiklik için, bir modül yazmak gerekir. Eğer israf performans vurdu ve zaman açısından ödeme fiyatı hedef hedef için sadece yüksek.

Sen t () fonksiyonu tarafından işlenir dize etkileyecek bir dize değiştirme yapabilirsiniz. Bu yapılır sitenin settings.php yapılandırma dosyasıdır.

Burada "Oturum Aç" ile "Log In" yerine nasıl olduğunu ...

$conf['locale_custom_strings_en'] = array(
  'Log In'      => 'Sign In',
);

Bu yalnızca İngilizce dizeleri etkileyecektir. Diğer diller için aynı şeyi (_fr, _ja, _es) belirli bir dil kodu ile sondaki _tr yerine çekinmeyin.

Bu herhangi bir şekilde değiştirmemeyi başlamadan önce bunu yapmak en iyisidir: formun kaynak koduna bakın ve gizli alan form_id değeri için onay - Bu size kullanmanız gereken tam form_id verir.