Drupal 7でコンテンツタイプの作成/編集フォームのテーマをどのように設定しますか?


7

それが言うように-編集フォームをテーマにする必要があるD7コンテンツタイプを持っています。私はこれをいつもD6でtemplate.phpにテーマ関数を登録し、関連するテーマ関数を書くことで行いましたが、特にtemplate.phpに入るものに関して、またはD7が.tplを使用するようになった場合、D7では状況が変わったようですこのための.phpファイルなど。何かアドバイスはありますか?


回答:


4

Drupal 7のテーマノードフォームに関するハンドブックページによると、実際に.tpl.phpテンプレートファイルに変更を加えることになります。

そうは言っても、通常はField GroupDisplay Suiteを使用する方が簡単であることがわかりました。ノードフォーム列は別のオプションです。


良い提案; ありがとう。あなたが言及したモジュールもチェックします。
ジム・ミラー

すばらしい答えです。私はいくつかの成功を収めてDisplay Suiteを使用しましたが、何かが足りなくなった場合は、それをオフにして問題を分析できます。また、特定のフィールドを出力するようにフォームをカスタマイズすることを検討している場合は、他の値に応じて特定のフィールドを表示するためにdrupal.org/project/field-conditional-stateを検討することもできます。
therobyouknow 2013

また、考慮してください。drupal.org/project/rules_formsを
therobyouknow

20

2つのオプションがあります。

オプション1:管理テーマのtemplate.phpを使用する

  • カスタマイズする適切なテーマを選択してください。デフォルトでは、drupal 7は管理用に別のテーマを使用し、admin / appearanceの下に、管理テーマとは何か、コンテンツの編集で管理テーマを使用するかどうかを示す設定があることに注意してください。この設定を見て、メインテーマと管理テーマのどちらをカスタマイズするかを判断します。
  • テーマが特定された後、そのテーマがコアテーマであり、sites / all / themesまたはsites / something.com / themesに存在するものではない場合、既存のテーマを変更するのではなく、ベーステーマを作成することができます。とにかくコアテーマを変更するのは悪い考えです。ダウンロードしたテーマであっても、新しいバージョンがリリースされたときにダウンロードしたテーマをアップグレードし続けることができるように、サブテーマを作成することには意味があります。
  • (オプション)サブテーマを作成します。たとえば、管理テーマは7 つで、コンテンツの編集にも使用されている場合、sites / all / themesの下にmy_sevenというフォルダーを作成するだけです。次に、新しく作成したmy_sevenディレクトリの下に、次の内容でmy_seven.infoを追加します。

    基本テーマ= 7つの名前= My Sevenの説明=私のシンプルな1列のテーブルレスで流動的な幅の管理テーマ(Sevenの子)。

  • 次に、template.phpというファイルを同じフォルダーに追加し、次の内容を含めます。フォームIDはコンテンツタイプのマシン名から厳密に派生していることに注意してください。ただし、テンプレート名は任意の名前にすることができますが、-node-formは従うのに適した規則のように見えます。

    <?php 
    
    function my_seven_theme() {
      return array(
        '<my_content_machinename>_node_form' => array(
            'arguments' => array('form' => NULL),
            'template' => '<my_content_machinename or anything else>-node-form',
            'render element' => 'form',
        ),
      );
    }
  • 次に、<content_type_machinename> -node-form.tpl.phpファイルを作成し、次の内容が機能するかどうかをテストします。カスタムフォームが表示されたら、tpl.phpを自分のコンテンツに変更します。タイトル以外のカスタムフィールドを選択して、正しく機能することを確認します。理想的には、単純なテキストフィールドではないものを選択します。用語参照フィールドタイプは、サブテーマが正常に機能していることを確認するのに適した候補です。

    <div>   
        <?php print drupal_render($form['title']); ?>
    </div>
    <div>
        <?php print drupal_render($form['field_<my_field1>']); ?>   
    </div>
  • テーマのレジストリキャッシュをクリアします(テーマが初めて使用される場合は実際には不要ですが、とにかくそれを行います)。

  • admin / appearanceページを使用して、新しいサブテーマを管理テーマとして設定します。
  • コンテンツを編集するか、新しいコンテンツを作成すると、変更されたフォームが表示されます。

オプション2:独自のdrupalモジュールを使用してフォームをカスタマイズする

  • sites / all / modulesの下にcustom_content_formsという新しいフォルダーを作成します
  • 次の内容のcustom_content_forms.infoファイルを作成します

    name = My Custom Content Forms
    description = A trivial module to customize my content entry forms such as smartphone
    core = 7.x
  • 次の内容でcustom_content_forms.moduleを作成します

    <?php
    
    function custom_content_forms_theme() {
        return array(
            '<contenttype_machine_name>_node_form' => array(
                'template' => '<contenttype_machine_name>-node-form',
                    'render element' => 'form',
            ),
        );
    }
  • 次に、<content_type_machinename> -node-form.tpl.phpファイルを作成し、次の内容が機能するかどうかをテストします。カスタムフォームが表示されたら、tpl.phpを自分のコンテンツに変更します。タイトル以外のカスタムフィールドを選択して、正しく機能することを確認します。理想的には、単純なテキストフィールドではないものを選択します。用語参照フィールドタイプは、サブテーマが正常に機能していることを確認するのに適した候補です。

    <div>   
        <?php print drupal_render($form['title']); ?>
    </div>
    <div>
        <?php print drupal_render($form['field_<my_field1>']); ?>   
    </div>
  • 管理に移動し、新しいモジュールを有効にします。ターゲットタイプのコンテンツを追加または編集すると、カスタマイズされたフォームが表示されます。

注:両方のメカニズムを使用してカスタマイズする場合、drupalはモジュールよりもテーマを優先します。

編集:上記はフィールドのみを生成します。デフォルトでは、ノード設定メニューと送信ボタンとプレビューボタンは表示されません。あなただけを追加する場合

<?php print kpr($form); ?>

$ forms配列のダンプを生成するページ(kprが機能するには、develモジュールを有効にする必要があります)で。次のものをtpl.phpに追加することで、フォームページでこれらを簡単に取得できることがわかります。

<div><?php print drupal_render($form['additional_settings']); ?></div>
<div><?php print drupal_render($form['actions']); ?></div>

+1すばらしい答え-私はこれを自分で使用します。また、ページに移動するURLに基​​づいていくつかのフィールドを事前入力するように拡張します。
therobyouknow

これは複数の値を持つフィールドをどのように処理しますか。つまり、特定のタイプのフィールド<?php print drupal_render($form['field_<my_field1>']); ?>をさらに追加する機能です。「別のアイテムの追加」ボタンがあるフィールドに使用しましたが、ボタンをクリックしても新しいフィールドが表示されませんでした。
therobyouknow 2013

:私はここに新しい質問尋ねることによって、より深く私の最後のコメントを説明してきたdrupal.stackexchange.com/questions/85975/...
therobyouknow

2
フォームを作成するときは、上記の回答で説明されているようdrupal_render_children($form);に、コードの最後で必ず関数を呼び出す必要があります。themery.com
dgd7 /

2番目のオプションに従ってカスタムコンテンツタイプ作成フォームのテンプレートを変更しましたが、フォームを送信した後、何も起こりません。ノードのコンテンツは挿入されず、フォームが再度読み込まれます。
shasi kanth 2014年

1

管理インターフェースからノードフォームを変更するには、以下を使用できます。

ディスプレイスイート-http://drupal.org/project/ds

フィールドグループ-http://drupal.org/project/field_group

レンダリング可能な要素-http : //drupal.org/project/rel

次のモジュールを有効にします:Display Suite、Display Suite Forms、Display Suite Extras、Field Group、Renderable Elements

admin / structure / rel / configの設定ページに移動し、「フォームの登録を有効にする」チェックボックスがオンになっていることを確認して、レンダリング可能な要素の設定を行います。

次に、いずれかのコンテンツタイプの[フィールドの管理]フォームに移動します。ページ上部の[フォーム表示の管理]をクリックして、レンダリング可能な要素にフォームを登録し、有効にするフィールドを選択します。このフォームを保存すると、標準のDisplay Suite UIを使用して、コンテンツタイプのすべてのフィールドの表示を管理できるようになります。

ソース:http : //getlevelten.com/blog/ian-whitcomb/drupal-form-layouts-renderable-elements

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.