web-dev-qa-db-ja.com

「最も読まれた」モジュールで時間範囲内の記事のみを表示する方法

2か月前に最も多く読まれたコンテンツのみを表示しようとしています。

Mod_article_popular/helper.phpファイルをチェックしてみましたが、$ model-> setStateを使用して必要なものを取得する方法がわかりません。

日付範囲内の記事のみを表示するにはどうすればよいですか?

2
Josh

フィルター状態を操作する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);
}

したがって、状態を設定する必要がある2つのフィルター状態は次のとおりです。

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

参考までに、コアファイルを直接編集しているようです。以降のJoomlaの更新によってカスタマイズが上書きされる可能性があるため、これはお勧めできません。

お役に立てれば...

3
Brian Bolli

私はこれを解決する2つの方法を見つけました。

.1)現在の日付を基準にして日付を逆に設定します。 (2か月前の記事が必要なため、60を使用しています)

        $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();
3
Josh

これを正確に行う無料のモジュールがJEDで入手できます。 日付範囲による最も人気のあるコンテンツ では、人気の記事にさまざまな日付範囲を設定でき、最終日、過去7日間、過去30日間、およびすべての時間のオプションがあります。

Most Popular Content by Date Range module

1
johanpw