it-swarm-eu.dev

Database di query per articoli, filtro per tag

Posso usarlo per ottenere articoli pubblicati dal database:

function queryDatabase_Posts($select, $limit) {
    // Database connection and query object.
    $db = JFactory::getDbo();
    $query = $db->getQuery(true);
    // Select.
    $query->select($select);
    $query->from($db->quoteName('#__content'));
    // Published posts only.
    $query->where($db->quoteName('state') . ' = 1'); 
    // Order by the date they are published.
    $query->order('publish_up DESC');
    // Set and fetch.
    $db->setQuery($query);
    return $db->loadAssocList();     
}

ma secondo questa panoramica dei tag della tabella #__content apparentemente sono mantenuti in una tabella diversa.

Come posso interrogare quella tabella? Come si chiama, cosa c'è dentro? C'è documentazione su questo?

Alla fine voglio interrogare il database per i post che hanno un certo tag di cui ho il nome. Quindi avrei bisogno di interrogare la tabella dei tag per l'ID.

5
kunterbunt

Potresti Join il #__content tabella con quella del #__contentitem_tag_map, che è la tabella che memorizza le relazioni molti-a-molti tra i vari elementi di contenuto e i tag:

$query->join('INNER', '#__contentitem_tag_map AS tags ON `tags`.`content_item_id` = `#__content`.`id`');

Quindi nella tua query puoi filtrare gli elementi di contenuto con un dove:

$query->where('(tags.tag_id = '. $yourTag .') AND `tags`.`type_id` = 1');
  • Nel tuo script, passa il tag desiderato a $yourTag variabile.

  • Il tags.type_id = 1 è il tipo per i tag associati agli articoli.

3
FFrewin