0

の両方で、レイアウトheadから呼び出されるという名前の要素で次のコード スニペットを使用しました。blog

$this->preMetaValues = array(
    'title' => __('SiteTitle', true).' '.$title_for_layout,
    'desc' => Configure::read('siteTitle').', '.Configure::read('siteSlogan'),
    'keywords' => Configure::read('keywords'),
    'type' => 'article',
    'site_name' => __('SiteTitle', true),
    'imageURL' => $html->url('/img/logo.png', true)
);
if(!isset($this->metaValues)){
  $this->metaValues = $this->preMetaValues;
}
else{
  $this->metaValues = array_merge($this->preMetaValues, $this->metaValues);
}

<?php echo $html->meta('description',$this->metaValues['desc']); ?>
<?php echo $html->meta('keywords', $this->metaValues['keywords']);?>

上記のコードを使用して、任意のビュー ファイルからメタ タグ値を定義または変更しました。はpreMetaValuesデフォルト値と見なされます。ビューに定義されているものがある場合metaValues、このコードはそれを変更し、metaValues使用できるようにします。

Cakephp では、記述されたコードは次のエラーを生成します。

ヘルパー クラス metaValuesHelper が見つかりませんでした。

エラー: 内部エラーが発生しました。

実際、CakePHP がこの変数をヘルパーと見なす理由がわかりません。どうすればこの問題を解決できますか?

4

3 に答える 3

1

コントローラーアクションから変数を設定することでそれを行うことができます:

$this->set('title_for_layout', 'Your title');

そして、ビューで、次のように印刷します。

<title><?php echo $title_for_layout?></title>

ドキュメントにこの例があります: http://book.cakephp.org/2.0/en/views.html#layouts

それらを他の変数として扱うだけです。

于 2013-09-18T12:41:57.977 に答える
0

なぜ $this オブジェクトを使用しているのですか? 次のような単純なソリューションを使用できませんか。

$preMetaValues = array(
    'title' => __('SiteTitle', true).' '.$title_for_layout,
    'desc' => Configure::read('siteTitle').', '.Configure::read('siteSlogan'),
    'keywords' => Configure::read('keywords'),
    'type' => 'article',
    'site_name' => __('SiteTitle', true),
    'imageURL' => $html->url('/img/logo.png', true)
);
if(!isset($metaValues)){
  $metaValues = $preMetaValues;
}
else{
  $metaValues = array_merge($preMetaValues, $metaValues);
}

<?php echo $html->meta('description',$metaValues['desc']); ?>
<?php echo $html->meta('keywords', $metaValues['keywords']);?>
于 2013-09-18T13:59:35.180 に答える