Как фильтровать статьи Joomla 3 по идентификатору статьи?

Я пытаюсь создать модуль Joomla, который отображает статьи на основе категорий и тегов.

Я взял код для выбора статей с тегами с https://github.com/lasinducharith/joomla-tags-selected) и добавил его в копию mod_articles_news:

public static function getList(&$params)
{
    $app = JFactory::getApplication();
    $db         = JFactory::getDbo();

    // Code base on https://github.com/lasinducharith/joomla-tags-selected to fetch ids of tagged articles 
    $tagsHelper = new JHelperTags;
    $tagIds = $params->get('tagid', array());
    $tagIds = implode(',', $tagIds);
    echo '<pre>search for tags[' . $tagIds . ']';

    $query=$tagsHelper->getTagItemsQuery($tagIds, $typesr = null, $includeChildren = false, $orderByOption = 'c.core_title', $orderDir = 'ASC',$anyOrAll = true, $languageFilter = 'all', $stateFilter = '0,1');

    $db->setQuery($query, 0, $maximum);
    $results = $db->loadObjectList();

    $article_ids=array();   
    foreach ($results as $result){
        $article_ids[]=$result->content_item_id;
    }
    echo ' yields articles[' . implode(',', $article_ids ) . ']</pre>';

    // Get an instance of the generic articles model
    $model = JModelLegacy::getInstance('Articles', 'ContentModel', array('ignore_request' => true));

    // Set application parameters in model
    $appParams = JFactory::getApplication()->getParams();
    $model->setState('params', $appParams);

    // Set the filters based on the module params
    $model->setState('list.start', 0);
    $model->setState('list.limit', (int) $params->get('count', 15));

    $model->setState('filter.published', 1);

    $model->setState('list.select', 'a.fulltext, a.id, a.title, a.alias, a.introtext, a.state, a.catid, a.created, a.created_by, a.created_by_alias,' .
        ' a.modified, a.modified_by, a.publish_up, a.publish_down, a.images, a.urls, a.attribs, a.metadata, a.metakey, a.metadesc, a.access,' .
        ' a.hits, a.featured' );

    // Access filter
    $access     = !JComponentHelper::getParams('com_content')->get('show_noauth');
    $authorised = JAccess::getAuthorisedViewLevels(JFactory::getUser()->get('id'));
    $model->setState('filter.access', $access);

    // Category filter
    $model->setState('filter.category_id', $params->get('catid', array()));

    // Article filter
    $model->setState('filter.id', $article_ids);

    // Filter by language
    $model->setState('filter.language', $app->getLanguageFilter());

    // Set ordering
    $ordering = $params->get('ordering', 'a.publish_up');
    $model->setState('list.ordering', $ordering);

    if (trim($ordering) == 'rand()')
    {
        $model->setState('list.direction', '');
    }
    else
    {
        $direction = $params->get('direction', 1) ? 'DESC' : 'ASC';
        $model->setState('list.direction', $direction);
    }

    // Retrieve Content
    $items = $model->getItems();
    $newitems=array();

    foreach ($items as &$item)
    {
        echo '<pre>fetched article[' . $item->id .'] which is ';

        if ( !in_array($item->id, $article_ids )){
            echo 'not tagged';
        } else{
            echo 'tagged';

        }
        echo '</pre>';
        ...
    }
    return $newitems;
}

Операторы отладки дают мне:

  • поиск по тегам[2] дает статьи[40,44,45]
  • выбранная статья[45], которая помечена
  • выбранная статья[44], которая помечена
  • извлеченная статья[43], которая не помечена
  • извлеченная статья[42], которая не помечена
  • извлеченная статья[41], которая не помечена
  • выбранная статья[40], которая помечена
  • извлеченная статья[39], которая не помечена
  • извлеченная статья[38], которая не помечена

Таким образом, статьи не были отфильтрованы по идентификатору. Буду очень благодарен за любой совет. Спасибо


person Murray Longworth    schedule 19.12.2014    source источник


Ответы (1)


Нашел проблему, фильтр должен быть article_id:

    // Article filter
    $model->setState('filter.article_id', $article_ids);

Теперь он выбирает статьи на основе тегов и категорий.

person Murray Longworth    schedule 20.12.2014
comment
Привет Мюррей! С некоторых пор у Joomla есть собственный сайт StackExchange: joomla.stackexchange.com. Я рекомендую вам задавать свои будущие вопросы, связанные с joomla, здесь. - person miroxlav; 24.01.2015