0

URLからパラメーターを取得し、それらをクランチしてから、tplファイルを介して結果を表示するファインダーというモジュールを作成しました。ここに関連する関数があります...

function finder_menu()
{
    $items = array();   
    $items['finder'] = array(
        'page callback' => 'finder_view',
        'access callback' => TRUE,
    );
    return $items;
}

function finder_theme($existing, $type, $theme, $path)
{
    return array(
        'finder_view' => array(
            'variables' => array('providers' => null),
            'template' => 'results',
        ), 
    );
}

function finder_preprocess_finder_view(&$variables)
{
    // put my data into $variables
}

function finder_view($zipcode = null)
{
    // Get Providers from Zipcode 

    return theme('finder_view', $providers);
}

これで、finder_view が呼び出されていることがわかりました。また、finder_preprocess_finder_view が呼び出されていることも知っています。最後に、result.tpl.php を使用して出力していることがわかります。しかし、コールバックで意味のある作業を行う方法に頭を悩ませることはできません。何らかの方法でそのデータをプリプロセッサで使用可能にして、「変数」に追加し、tpl ファイルでアクセスできるようにします。

tpl ファイルを使用している状況では、コールバックは何かに役立ちますか? 私は過去にコールバックがすべての作業を行い、テーマ関数に渡す場所でこれを行いましたが、今回は代わりにファイルを出力に使用したいと考えています。

ありがとう...

更新: これは実際にはパラメーターの命名の問題でした。Drupal 6 は、hook_theme で「変数」ではなく「引数」キーを使用します。変更すると、すべてが期待どおりに機能しました。ロジックがコールバックで実行されていたため、プリプロセッサも削除しました。

4

2 に答える 2

1

ロジックは常にコールバックにある必要があります。メニュー配列で「ファイル」を指定することにより、別のファイルにすることができます。

あなたの例では、郵便番号から「プロバイダーを取得」すると、これは非常に重要です。:)

テーマ関数では、$providers 配列を従来の drupal $vars 配列に似たものに変換することができますし、変換する必要があります。または、前処理とテンプレートの両方をスキップして、テーマ関数ですべてのテーマ作業を単純に行うこともできます。前処理とテンプレートは便利であり、常に必要なわけではありません。

テーマ関数の名前を別のものに変更するか、さらに言えばコールバックに変更します。これにより、物事が少し理解しやすくなります。

それは役に立ちますか?あなたが本当に何を求めているのかは 100% わかりませんが、適切に構造化されたままコードを簡素化したい場合は、それが役立つことを願っています。

于 2011-02-02T23:21:45.013 に答える
0

問題は、「引数」の代わりに「変数」を使用した hook_theme に存在していました。この質問を削除する必要がありますか?

于 2011-02-03T00:31:35.680 に答える