it-swarm.dev

Come posso ottenere informazioni sulla categoria principale visualizzata in un plug-in di contenuto

Ho un plugin che deve pre-elaborare la descrizione di una categoria in base ai suoi parametri prima che visualizzi tutte le sottocategorie che contiene.

Per articoli (contesto = com_content.article), il plug-in onContentPrepare evento passa $article e $params dando tutto ciò di cui avresti bisogno, ma quando il contesto è com_content.category, $params è vuoto e $article ha solo $article->text.

So che la categoria di interesse è nella stringa di query, ma esiste un modo migliore per trovare informazioni sulla categoria, ecc. Che sono già state recuperate lungo la strada?

Con index.php?option=com_content&view=category&id=123&Itemid=456

public function onContentPrepare($context, &$article, &$params, $page=0)
    if($context == 'com_content.category') {
        // $article has only article ->text
        // $params is empty
        // how can I get category params here?
    }
2
GDP

Come sottolineato da @codinghands, la categoria non è tecnicamente soddisfatta, quindi (in base alla progettazione) tutte le informazioni di interesse non sono disponibili, lasciando solo il titolo della categoria generalmente disponibile a modificare.

L'altra "cattura" quando si elencano tutte le sottocategorie e gli articoli all'interno della categoria è che l'evento del plugin viene attivato per tutti , quindi se ne hai di più rispetto a poche categorie e/o articoli, il codice del plug-in verrà attivato molto , a meno che non sia previsto il licenziamento solo una volta.

Per ottenere i parametri di che viene visualizzata solo la categoria principale , il mio presupposto è che la prima volta che il plugin viene attivato, esso è per la categoria principale. (Questo è stato dimostrato vero nel mio caso, ma non posso essere certo che altre impostazioni potrebbero cambiarlo).

index.php option = com_content & view = categoria & id = 123?

static $isMainCat = true;
if($isMainCat){
    $catid = JFactory::getApplication()->input->getInt('id');

    $basePath = JPATH_ADMINISTRATOR . '/components/com_categories';
    require_once $basePath . '/models/category.php';
    $category = new CategoriesModelCategory(array('table_path' => $basePath . '/tables'));
    $item = $category->getItem($catid);

    $params = new JRegistry;
    $params->loadString($item->params);
    $image = $params->get('image','noimage.gif');

    $isMainCat = false; // Prevent this code from running on any but the first category
}
1
GDP

Guardando view.html.php per com_content.category, La chiamata trigger è:

$dispatcher->trigger('onContentPrepare', array ('com_content.category', &$item, &$item->params, 0));

che sta inviando i parametri $item (articolo). Non buono.

Guardando la riga 72 dello stesso file (parent::commonCategoryDisplay();), che si trova in JCategoryView ( codice qui ), il $params sono memorizzati (in view.html.php, $this->params) ma poiché una categoria non è tecnicamente contenuta, l'evento contentPrepare non è attivato in questa fase.

Potresti sovrascrivere questo view.html.php Per attivare l'evento. Vedi questa guida - ma richiede un plugin speciale.

2
codinghands