web-dev-qa-db-ja.com

hook_themeを使用したUbercartのカートページ(Drupal 7)のテーマ設定に関する問題

Ubercartのuc_cartモジュールは、テーマ/テンプレートを用意する「カート」ページを提供します。私がしたことは以下のmymodule_theme()に追加されています:

_    'uc_cart_view' => array(
        'render element' => 'page', // IS THIS CORRECT?
        'template' => 'cart', // Located in mymodule/templates/cart.tpl.php
        'path' => drupal_get_path('module', 'mymodule') . '/templates', 
    ),
_

しかし運が悪い!

私の質問:

_render element_キーに他の値を指定しますか?または、variablesエントリを用意しますか? _render element_エントリの代わりに空の配列を使用してvariablesを試しましたが、うまくいきませんでした。

ここに、Ubercartのuc_cartモジュールに関する詳細情報を示します。これにより、この問題の解決に役立ちます。

あなたの考慮のために

_uc_cart_menu_からの部分:

_$items['cart'] = array(
    'title' => 'Shopping cart',
    'description' => 'View/modify the contents of your shopping cart or proceed to checkout.',
    'page callback' => 'uc_cart_view',
    'access arguments' => array('access content'),
    'file' => 'uc_cart.pages.inc',
  );
_

したがって、私は_uc_cart_view_のカスタムテンプレートを使用する必要があると考えました。このuc_cart_view()は* uc_cart.pages.inc *ページの関数です。便宜上、関数 here を貼り付けました。

私が間違っていることについて何か助けはありますか?

1
Shafiul

c_cart_view() はフォームビルダーではありません。これはページコールバックです。そのため、theme_uc_cart_view()uc_cart_view()に対して自動的に呼び出されません。必要なテーマ関数を呼び出すか、次のコードなどで参照する必要があるのは、ページコールバックです。

_  if (empty($items)) {
    return array(
      '#theme' => 'uc_empty_cart',
    );
  }
_

あなたができることは次のとおりです:

  • hook_menu_alter() を実装して、 http://example.com/cart に対して呼び出されるページコールバックを変更します。

    _function mymodule_menu_alter(&$items) {
      if (isset($items['cart'])) {
        $items['cart']['page callback'] = 'mymodule_cart_view';
      }
    }
    _
  • ページコールバックを実装して、コンテンツを希望どおりに出力します。

mymodule_cart_view()のコードを提案することはできません。 uc_cart_view()から使用されているコードを見ると、主な部分は次のコードであることがわかります。

_  // Load the array of shopping cart items.
  $items = uc_cart_get_contents();

  // Display the empty cart page if there are no items in the cart.
  if (empty($items)) {
    return array(
      '#theme' => 'uc_empty_cart',
    );
  }

  $build = array();
  // Load through the cart panes...
  foreach (uc_cart_cart_pane_list($items) as $id => $pane) {
    // If the pane is enabled...
    if ($pane['enabled']) {
      // Add its output to the cart view.
      $build[$id] = $pane['body'];
    }
  }
_

Drupal 7では、ページコールバックが返すことができるものは次のとおりです。

  • 出力するマークアップを含む文字列
  • drupal_render() から受け入れられる配列(以下のような)

    _$build = array(
      '#theme' => 'node', 
      '#node' => $node, 
      '#view_mode' => $view_mode, 
      '#language' => $langcode,
    );
    _
    _$block = array(
      '#markup' => '<em>' . t('There are no rows matching the selected criteria') . '</em>'.
    );
    _
    _$styles = array(
      '#type' => 'styles', 
      '#items' => $css,
    );
    _

補足として、テーマ定義では、テンプレートのファイル名を「カート」にすることはできません。テンプレートファイルは「uc_cart_view」用であるため、「uc_cart_view」または「uc-cart-view」としてレポートできます。 Drupalからの他のファイル名は受け入れられません。

1
kiamlaluno
$items['uc_cart_view_form'] = array(
    'template' => 'cart/uc-cart-view-form',
    'arguments' => array('form' => NULL),
 );

を使用する必要があるという意味uc_cart_view_form

0
niksmac