web-dev-qa-db-ja.com

URLから登録フォームのカスタムフィールドに値を渡すにはどうすればよいですか?

私はこの質問のバリエーションが尋ねられたことを知っていますが、この特定の特性のセットで何も見つかりませんでした。また、私が知っている唯一のプログラミング言語はpythonです。わからないPHPまったくわからない。

Urlパラメータの値を、登録フォームのカスタム非表示フィールドに渡すことができるようにしたいのですが。

テーマ関数、テンプレートファイル、およびhook_form_alter()を使用してみましたが、これらを機能させることができませんでした。

これまでのところ、カスタムフィールドを追加できましたが、値を渡せることは言うまでもなく、非表示にできません。テンプレートファイルを介してフォームにhtmlを追加できますが、それはそれで終わりです。

私の試みはこのサイトに基づいています: themery

これは、メールのラベルを変更できるかどうかを確認しようとしたコードです。

function acq_dmc1_form_user_register_form_alter(&$form, &$form_state) {


$form['mail']['#title'] = t('E-mailzzzzzz');
$form['field_recipientid']['#title'] = t('QualID'); //this is the custom field


}

...しかし、うまくいきませんでした。

これはフォームidです。

<input type="hidden" name="form_id" value="user_register_form" />

これは、カスタムフィールドにレンダリングされるHTMLです。

<input class="text-full ckeditor-mod form-text" type="text" id="edit-field-recipientid-und-0-value" 
name="field_recipientid[und][0][value]" value="[url:path]" size="90" maxlength="25">

編集:2013年6月17日誰かがこのコードを解決策としてくれましたが、それが機能するかどうか、またはどのように機能するかわかりません:

function passval_user_presave(&$edit, $account, $category) {
    $fields = array(
    'RecipientID' => array('fieldname'=>'field_recipientid', "type"=>'complex'),
        'mail' => array('fieldname'=>'mail', "type"=>'simple'),
    );
    $urlargs = drupal_get_query_parameters();
    foreach($fields as $key=>$field) {
        if(isset($urlargs[$key])) {
            $value = ($urlargs[$key]);
            $value = intval($value);
            if($field['type'] == 'complex') {
            $edit[$field['fieldname']] = array('und'=>array(0=>array('value'=>$value, 'format'=>'', 'safe_value'=>$value)));
        }
        else {
            $edit[$field['fieldname']] = $value;
            }               
        }
    }
}
1
655321

タイプを非表示に設定するだけで、drupalで非表示のフォーム要素を作成できます。したがって、あなたの場合、それは次のように達成できます:

$form['field_recipientid']['#type'] = 'hidden';

Arg()関数を介してdrupalのURL引数にアクセスできます。したがって、ユーザー登録ページに何かを渡し、それをfield_recipientidに設定したい場合は、 " http://example.com/user/register/MLRP_8UByesUEfeeIA 」.

次に、同じフォームのalter関数から、arg(2)を呼び出してパスの3番目の項目を取得し、次のように値を設定します。

if (isset(arg(2))) {
  $form['field_recipientid']['#value'] = arg(2);
}

非表示になっていない他のフォーム要素(テキストフィールドなど)でこれを行うことを考えている人は、#default_valueを使用してください。テキストフィールドに#valueを設定した場合、drupal forcableはその値のみを受け入れ、テキストフィールド値の編集を無視すると、ユーザーが行った可能性があります。

DrupalのフォームAPIの詳細については、 drupal APIサイトのフォームAPIリファレンスページ を参照してください。

2
alexkb

これはあなたが望むモジュールだと思います ノード参照URL 。 RecipientIDというコンテンツタイプのフィールドを作成し、「URLからのノード参照」ウィジェットを使用するように設定します。その後、URL「node/add/MLRP_8UByesUEfeeIA」を介して変数を渡すことができ、モジュールはRecipientIDフィールドに自動的にデータを入力します。

0
longboardnode

hook_form_alter()でこれを実行する方法を示します。

フィールドのhook_form_alter()で「#default_value」を変更する必要があります。

0
smile