Domanda

Ho seguito Silverstripe DataObjects come pagine - Parte 2: Utilizzo di segmenti di amministrazione e URL per creare un tutorial del catalogo del prodotto sul mio locale e che si imbattono in un problema della barra laterale.

Quando uso lo stesso metodo per creare una barra laterale di Tutorial One, Viene visualizzato un messaggio di errore sul mio sito [Errore utente] Eccezione nonttata: Oggetto-> __ Call (): il metodo 'CategoryPages' non esiste su "Prodotto"

Questo è il codice che ho aggiunto a Product.php per la barra laterale.

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

// Assicurati che il DO venga visualizzato nel menu (è necessario altrimenti la barra laterale non viene visualizzata quando non è connessa)

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

Qualcuno sa come risolvere questo problema? Grazie mille.

È stato utile?

Soluzione

hai provato $this->Categories()->First()->canView() ? Leggere i commenti qui sotto mi sembra che tu stia cercando di chiamare Canview nell'elenco di tutti gli oggetti della Pagina di categoria correlati (ComponENSET)

Modifica] Come menzionato nei commenti qui sotto, si ottiene un errore ora nella canto Chiavi CMS su un non oggetto. La mia ipotesi è che non hai ancora allegato alcuna categorie a qualche prodotto, quindi categorie ()-> first () restituisce null. vi preghiamo di provare:

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;
  }
}

Non ricevo davvero il motivo per cui hai implementato questo controllo di canview. Importa davvero quando un prodotto è già correlato a una categoria? Altrimenti, solo return true; nel tuo metodo di canto.

Altri suggerimenti

Non l'ho provato da solo, ma dando un'occhiata ai commenti che dovresti cambiare $Category = $this->CategoryPages()->First(); a $Category = $this->Categories()->First();

L'errore mi suggerirebbe che non hai una relazione HAS_one sulla tua classe di prodotti con il nome "categoria pagine". L'esempio nel tutorial ha quanto segue nella classe del personale (nota la relazione di StaffPage):

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

Questo è ciò che si fa riferimento nella funzione di canto di esempio ($ this->StaffPage()):

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

Hai una relazione equivalente denominata "Pagine di categoria" sul tuo prodotto? È necessario specificare correttamente la relazione con il genitore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top