0

Silverstripe DataObjects as Pages - Part 2: Using Model Admin and URL Segments to create a product catalog tutorial on my localhost をフォローしていて、サイドバーの問題が発生しました。

チュートリアル 1と同じ方法でサイドバーを作成すると、自分のサイトに [User Error] Uncaught Exception: Object->__call(): the method 'categorypages' does not exist on 'Product' というエラー メッセージが表示されます。

これは、サイドバーを表示するために Product.php に追加したコードです。

//Return the Title as a menu title
public function MenuTitle()
{
  return $this->Title;
}  

// DO がメニューに表示されることを確認します (必要な場合は、ログインしていないときにサイドバーが表示されません)。

function canView()
{
 return $this->CategoryPages()->canView();
}

この問題を解決する方法を知っている人はいますか?どうもありがとう。

4

3 に答える 3

2

試しました$this->Categories()->First()->canView()か?以下のコメントを読むと、関連するすべての CategoryPage オブジェクト (ComponentSet) のリストで canView を呼び出そうとしているように思えます

[編集] 以下のコメントで述べたように、オブジェクト以外で canView を呼び出す cms でエラーが発生します。私の推測では、まだカテゴリを製品に関連付けていないため、Categories()->First() は NULL を返します。してみてください:

function canView() {
  //always show this product for users with full administrative rights (see tab 'Security' in CMS
  if(Permission::check('ADMIN')) return true;
  //go and get all categories this product belongs to
  $categories = $this->Categories();
  //are there any categories?
  if($categories->Count() > 0) {
    //get the first category to see wheter it's viewable by the current user
    return $categories->First()->canView();
  } else {
    //product doesn't belong to any categories, so don't render it
    return false;
  }
}

この canView チェックを実装した理由がよくわかりません。製品がすでにカテゴリに関連付けられているかどうかは本当に重要ですか? それ以外の場合return true;は、canView メソッドでのみ。

于 2012-01-23T19:56:13.567 に答える
0

私は自分で試したことはありませんが、変更$Category = $this->CategoryPages()->First();する必要があるコメントを見てください$Category = $this->Categories()->First();

于 2012-01-23T00:13:50.643 に答える
0

このエラーは、「CategoryPages」という名前の Product クラスに has_one 関係がないことを示唆しています。チュートリアルの例には、StaffMember クラスに関する次の内容があります (StaffPage の関係に注意してください)。

//Relations
static $has_one = array (
    'StaffPage' => 'StaffPage',
    'Photo' => 'Image'
);

これは canView 関数の例で参照されているものです ($this-> StaffPage ()):

function canView()
{
    return $this->StaffPage()->canView();
}

製品に「CategoryPages」という名前の同等の関係がありますか? 親との関係を正しく指定する必要があります。

于 2012-01-23T04:01:19.067 に答える