Как получить модуль «Самый читаемый», чтобы показывать только статьи в пределах временного диапазона

Я пытаюсь отобразить только самый прочитанный контент из двух месяцев назад.

Я попытался проверить файл mod_article_popular /helper.php, но не могу понять, как использовать $ model-> setState, чтобы получить то, что я хочу.

Как я могу отображать только статьи в диапазоне дат?

2 голоса | спросил Josh 6 +04002014-10-06T21:44:42+04:00312014bEurope/MoscowMon, 06 Oct 2014 21:44:42 +0400 2014, 21:44:42

3 ответа


3

Вы должны искать класс ContentModelArticles, для которого состояние фильтра управляется. внутри классов метод getStoreId - это ответ:

protected function getStoreId($id = '')
{
    // Compile the store id.
    $id .= ':' . serialize($this->getState('filter.published'));
    $id .= ':' . $this->getState('filter.access');
    $id .= ':' . $this->getState('filter.featured');
    $id .= ':' . serialize($this->getState('filter.article_id'));
    $id .= ':' . $this->getState('filter.article_id.include');
    $id .= ':' . serialize($this->getState('filter.category_id'));
    $id .= ':' . $this->getState('filter.category_id.include');
    $id .= ':' . serialize($this->getState('filter.author_id'));
    $id .= ':' . $this->getState('filter.author_id.include');
    $id .= ':' . serialize($this->getState('filter.author_alias'));
    $id .= ':' . $this->getState('filter.author_alias.include');
    $id .= ':' . $this->getState('filter.date_filtering');
    $id .= ':' . $this->getState('filter.date_field');
    $id .= ':' . $this->getState('filter.start_date_range');
    $id .= ':' . $this->getState('filter.end_date_range');
    $id .= ':' . $this->getState('filter.relative_date');

    return parent::getStoreId($id);
}

Итак, для двух состояний фильтра, которые нужно установить для состояний, выполните следующие действия:

    $model->setState('filter.date_filtering', $range);

FYI, похоже, что вы напрямую редактируете основные файлы; который не рекомендуется, так как любое последующее обновление Joomla может переписать любую настройку.

Надеюсь, что это поможет ...

ответил Brian Bolli 7 +04002014-10-07T01:49:35+04:00312014bEurope/MoscowTue, 07 Oct 2014 01:49:35 +0400 2014, 01:49:35
3

Я нашел два метода решения этого вопроса.

.1) Установите дату в обратном направлении относительно текущей даты. (Я использую 60, потому что мне нужны статьи из 2 месяцев назад)

        $model->setState('filter.date_filtering', 'relative');
        $model->setState('filter.relative_date', $params->get('relative_date', 60)); 

        $items = $model->getItems();

2) Установите любой предпочтительный диапазон дат

    $model->setState('filter.date_filtering', 'range');
    $start_date = strtotime('-2 months');
    $start_date = date("Y-m-d h:i:s", $start_date);
    $end_date = strtotime('now');
    $end_date = date("Y-m-d h:i:s", $end_date);        
    $model->setState('filter.start_date_range', $start_date);
    $model->setState('filter.end_date_range', $end_date);

    $items = $model->getItems();
ответил Josh 9 +04002014-10-09T01:23:01+04:00312014bEurope/MoscowThu, 09 Oct 2014 01:23:01 +0400 2014, 01:23:01
1

В JED доступен свободный модуль, который выполняет именно это. Самый популярный контент по диапазону дат позволяет устанавливать разные диапазоны дат для популярных статей, с вариантами за последний день, последние 7 дней, последние 30 дней и все время.

Самый популярный контент по модулю диапазона дат

ответил johanpw 15 +04002014-10-15T06:56:21+04:00312014bEurope/MoscowWed, 15 Oct 2014 06:56:21 +0400 2014, 06:56:21

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132