Материал из Wiki.X-news.org
Перейти к: навигация, поиск

Итак, возникла проблема: сайту на Joomla исполнилось 6 лет, а модуль mod_articles_popular показывает самыми популярными новостями те, которые были популярны 3-4 года назад. Нужно внести изменения в модуль таким образом, чтобы он показывал только популярные статьи за последний месяц.

Итак, наши действия:

1 Шаг открываем [joomla_ROOT]/modules/mod_articles_popular/mod_articles_popular.xml, и ищем в нем фрагмент:

<field name="show_front" type="radio" default="1" label="MOD_POPULAR_FIELD_FEATURED_LABEL" description="MOD_POPULAR_FIELD_FEATURED_DESC">
   <option value="1">JSHOW</option>
   <option value="0">JHIDE</option>
</field>

После этого фрагмента добавляем код:

<field name="nDays" type="text" default="0" label="N Days" description="Show the most read n last N days (0 is for all-time)">
   <option value="1">JSHOW</option>
   <option value="0">JHIDE</option>
</field>

Теперь можем зайти в админ панель, и в настройках указать, за какой период нам нужно выводить популярные статьи:

Popular.gif

2 Шаг Открываем [joomla_ROOT]/modules/mod_articles_popular/helper.php и ищем фрагмент кода:

// Ordering 
$model->setState('list.ordering', 'a.hits');
$model->setState('list.direction', 'DESC');

После него вставляем код:

//custom date condition
$nDays = $params->get('nDays');
if($nDays>0) {
   $model->setState('filter.nDays', $nDays);
}

3 Шаг: Открываем [joomla_ROOT]/components/com_content/models/articles.php, ищем в нем код:

// Filter by language
if ($this->getState('filter.language')) {
   $query->where('a.language in ('.$db->quote(JFactory::getLanguage()->getTag()).','.$db->quote('*').')');
   $query->where('(contact.language in ('.$db->quote(JFactory::getLanguage()->getTag()).','.$db->quote('*').') OR contact.language    IS NULL)');
}

вставляем после него код:

// Filter by Date Limit
if($this->getState('filter.nDays') && $this->getState('filter.nDays')>0) {
   $query->where("(TO_DAYS(NOW()) - TO_DAYS( a.created ) <= " . $this->getState('filter.nDays') . " )");
}

P.S. Не забываем делать резервные копии файлов.