Drupal 6: Sadece MySQL değerin ilk karakterini ekleme

4 Cevap php

Ben (sizin için drupal-ers) bir CCK türü bir hook_form_alter ile çalışıyorum. Ben normalde benim düğüm şeklinde bir seçim listesi olan bir alan var. Ancak, bu durumda, ben seçim listesini gizlemek istiyorsanız, ve bir SQL sorgusu ile formda değerini doldurmak.

Her şey güzel gidiyordu. Benim istenilen değer HTML kaynağı gösterilmesini olduğunu görebiliyordu, bu yüzden benim sorgu düzgün yürütme biliyordum. Ben formu göndermek Ancak, yalnızca değerin ilk karakterini ekler. Sütun değerleri sırasıyla, 5,7,1 vardı - benim testlerin birkaç 566, 784, 1004 değerleri vardı.

İlk başta ben DB sütun nitelikler olmak zorunda düşündüm, ama ben alan gizli yapar ve el değerini seçmek benim form_alter kaldırdığınız zaman, doğru değer eklenir?!?

   <?php
function addSR_form_service_request_node_form_alter(&$form, $form_state) {
       if (arg(0) == 'user' && is_numeric(arg(1))) {
        $account = arg(1);
        $club = 2589;
        $form['field_sr_account'] = array( '#type' => 'hidden',
        '#value' => $club
        );

           }
}


?>

Sadece ilk karakter eklenecek Herkes neden görebiliyor musunuz?

Note: I have tried deleting and recreating the column, using #value & #default_value, and it is still submitting only the first character of the integer. Also, I eliminated the submit handler as a possible cause by removing it, which still resulted in only one character being submitted

More Updates - Still Searching! Okay, some good questions. Allow me to answer them:

  1. DB Kolon tipi tam sayı olduğu (4)
  2. Kanca üreten HTML:

    input type = "hidden" name = "field_sr_account" id = "edit-alan-sr-hesap" value = "2589"

Son Güncelleme: Ben konu dizinin yapısına daraltılmıştır düşünüyorum. Ben işlendikten değiştirmek formdan sonra bu alanda var_dump ne zaman, bu ne olsun ..

[43] => Array
        (
            [#type] => hidden
            [#default_value] => 2589
            [#post] => Array
                (
                )

            [#programmed] =>
            [#tree] =>
            [#parents] => Array
                (
                    [0] => field_sr_account
                )

            [#array_parents] => Array
                (
                    [0] => field_sr_account
                )

            [#weight] => 0.016
            [#processed] => 1
            [#description] =>
            [#attributes] => Array
                (
                )

            [#required] =>
            [#input] => 1
            [#process] => Array
                (
                    [0] => form_expand_ahah
                )

            [#name] => field_sr_account
            [#id] => edit-field-sr-account
            [#value] => 2589
            [#defaults_loaded] => 1
            [#sorted] => 1
        )

Ben form değerini ayarlayabilirsiniz alanın yapısı nedir. Bu gerek düşündüren ne abhaga gibi bir şey olacak ..

4 Cevap

Değişmeye çalıştığınız alan aslında bir seçme widget kullanarak bu yana, CCK $form_state['values']['field_sr_account'][0]['value'] arıyor olacak. Bir # Gizli türüne alanını ayarlama ve # değerini ayarlayarak, $form_state['values']['field_sr_account'] onun değerini alacak. CCK Bunun ilk unsuru erişmek ve değerin ilk karakteri ile sona çalışacağız.

Updated: ne gerek elde etmek için en kolay yolu, bir şey yapmak olacaktır:

function addSR_form_service_request_node_form_alter(&$form, $form_state) {
   if (arg(0) == 'user' && is_numeric(arg(1))) {
    $account = arg(1);
    $club = 2589;
    // Use this property to store the value to restore back
    $form['#field_sr_account'] = $club;
    $form['field_sr_account'] = array( '#type' => 'hidden','#value' => $club);
   }
}

/*in your submit handler, restore the value in the proper format*/
$form_state['values']['field_sr_account'] = array('0' => array('value' => $form['#field_sr_account']));

Eski Cevap

One way of accomplishing what you are trying to do is to copy the whole $form['field_sr_account'] into $form['#field_sr_account'] and then provide the value through the SQL query in the right format in the submit handler itself.

Tamam http://api.drupal.org/api/drupal/developer--topics--forms_api_reference.html#hidden karşı bakmak http://api.drupal.org/api/drupal/developer--topics--forms_api_reference.html#value

Ayrıca gizli yerine değer kullanmanız önerilir. Sen üzerine http://api.drupal.org/api/drupal/developer--topics--forms_api.html/6 bu bilgi bulabilirsiniz

Ayrıca, tipi gizli özelliklerini sizin için bir sorun neden olabilir ona atama için izin verilmez. Ben "hala başarmak için çalışıyoruz ne biraz belirsiz m gibi formlar API ile sahip olabilecek herhangi bir kullanım sorunları özellikle gönderme düğmesi ile ... Bu kaynakların cevap olmalıdır.

Eski yanıt:

Ok if I understand this correctly $club is not being set correctly. If the first result from your query is the number your looking for then this should work.

Aramayı deneyin

<?php print_r(db_fetch_array($result)) ?>

to get a look at everything returned from the query.

I'm a little unclear as to what is being set incorrectly. If it's #value inside your associated array then the culprit must be the query. If #value is being set correctly and whatever your doing with it later may be the culprit (not shown here). If its the values in your $form_state I don't see that your using $club here at all.

Also, in your addSR_submit_function you don't seem to be using the $form variable, or using $club for anything except for setting the message which appears at the top of the page your on when it's called.

I may need some further clarification as to what exactly is going wrong.

Also, when you're calling drupal_set_message function, are you just doing this for debugging purposes?

Kontrol gerekmiyor

drupal_set_message($form_state['values']['field_sr_account']);

yerine

drupal_set_message($club);

addSR_submit_function in?

Tamam, sadece bir Tahminim: ne tür db_result sorgu için döner emin değil, bu tür dönüşümleri ile bir ilgisi olabilir? Yani bu kesin değer int yapmaktır.

'#value' => (int)$club

cinqoTimo, meraktan CCK alanında ne tür bu? Bir tamsayı, ondalık, Float mı? ve normalde varsayılan olarak bu alanda herhangi bir özel parametreleri var mı? Db sütun türü nedir?

Eğer formun html çıktısını gönderebilir miyim. O gidiyor olabilir ne gibi bir ipucu verebilir.

Bu alan için herhangi bir değeri düzenlemek için herhangi bir javascript kullanıyor musunuz?

Eğer addSR_form_service_request_node_submit kanca gelen değeri sonuçları çıktısı denediniz mi? Orada herhangi bir fark.

Tüm sorular için özür dilerim. Sizin üslerinin çoğu örtülü var gibi görünüyor, sadece yüksek sesle düşünüyorum.