0

これが drupal フォーラムではないことは承知していますが、そこでは何の反応も得られないので、ここで試してみることにしました。

ユーザーからのカスタム コンテンツを受け入れる Web サイトを作成しています。そのため、このサイトにはフォームとカスタム モジュールがあります。管理テーマを使用する代わりに、このフォームはカスタム テンプレート内に配置されます。このテンプレートは、残りのページと統一された外観を持つように作成されます。その結果、hook_form を使用してフォーム要素を作成することは論外です。ここに私の問題があります。このフォームはカスタム テーマを使用しているため、フォームの送信時にユーザーが新しいコンテンツ データを送信していることを drupal に知らせるにはどうすればよいかわかりません。

  • 管理ページのコンテンツ送信ページと同じクエリ文字列を使用する必要がありますか?q=node/add/page のように、html フォームのアクション属性に? (また)

  • 唯一の方法は、URL をカスタム関数にマップし、その中である種のフックを呼び出すことですか?

ありがとう

4

1 に答える 1

3

フォームに必要な任意のマークアップを文字どおり作成できます。必要なのは#theme、フォームを定義するときに属性を使用することだけです。それを使用すると、フォーム自体と任意の要素のテーマ機能を設定できます。

Drupal の FAPI を使用しないのは、非常に悪い考えです。それは非常に多くの問題を解決しますが、サイトにセキュリティホールを開けたい場合は、それを使用しないことが最初のステップになります. Drupal のような開発フレームワークは、その API を使用しない場合、あまり価値がありません。

編集:
最初に行うことは、Drupal のFAPI リファレンスにアクセスすることです。そこでは、FAPI に関するほとんどすべてを学ぶことができます。

必要に応じてテンプレートを使用できますが、基本的な Drupal テーマにすぎませんが、使用しないことをお勧めします。すべての要素に対してテーマ関数を作成し、代わりにそれを使用した場合、すべての要素をループして Drupal のようにレンダリングすることができれば、テンプレート ファイルを変更する必要があるたびにテンプレート ファイルを編集する必要がなくなります。形。今はもっと手間がかかるかもしれませんが、その作業には見返りがあります。よりクリーンで保守しやすいコードです。

コードでは、次のようになります。

$form['item'] = array(
    ...
    '#theme' => 'theme_function',
);

これを行うと、要素は「theme_function」を使用してレンダリングされます。textfields のそのようなテーマ関数の例を見ることができます。

于 2010-05-08T15:31:22.027 に答える