0

私は Drupal 7 を Views、Feeds、Views PHP モジュールと共に使用しています (特に関連するのはこれらだけだと思います)。

私の目標は、(a) フィード モジュールを介して取り込まれた複数の RSS フィード、(b) 自分のサイトで手動で作成されたコンテンツ用の 2 つまたは 3 つの独自のコンテンツ タイプを組み合わせた単一のビューです。その結果、自分のサイトや別のサイト (もちろん、そのサイトに RSS フィードがある場合) がどこにあっても、私の最新のすべての作品のストリームを含むブロックとページが作成されます。

理想的な結果は、コンテンツ タイプに関係なくアイテムを混ぜ合わせて、日付で並べ替えられた 1 つのリストを表示することです。

私の問題: フィード モジュールとカスタム コンテンツ タイプの日付フィールドが異なります。私のコンテンツ タイプには、Original Date というフィールドがあり、コンテンツを作成するときに設定します (たとえば、3 年前に書いた記事を追加する場合など)。サイト)。ただし、各 feed_item には日付フィールド Published Date があり、RSS フィードの日付に対応し、残りのアイテムと共に RSS によって受信されます。

Views PHP 機能を使用して、さまざまな方法で if/then ステートメントを使用しようとしました。たとえば、content_type を確認し、コンテンツ タイプに応じて変数を元の日付または公開日のいずれかに設定します。または、元の日付フィールドが設定されているかどうかをテストしました。その場合はそのフィールドを返し、そうでない場合は Published Date フィールドを返します。それらはすべてさまざまな方法で失敗します。ほとんどの場合、匿名ユーザーにも表示される PHP エラーがスローされます (明らかに問題です)。

ビューのソート基準セクションでこれらのさまざまなアプローチを直接試しました。また、[フィールド] セクションで日付を考え出し、その結果を並べ替え条件で呼び出すようにしました。簡単にソートできるように、すべてを Unix タイムスタンプに変換しました。日付を日付のままにしてみました。どちらにしても運はありません。

ここに本当に奇妙な部分があります。これらのアプローチを使用して正しい日付を表示することに成功したため、(たとえば) ブロックは次のように表示されます。カスタム コンテンツ タイプの元の日付、および • TITLE | フィード項目の公開日。しかし、日付で並べ替えるために同じアプローチを試みると、失敗します。

もっと単純なものを見落としていますか?PHP ビューを使用する必要がありますか? 2 つの異なる (似ていますが) フィールドの組み合わせによって、複数のコンテンツ タイプのビューを並べ替える他の方法はありますか?

ありがとう!

tf

4

2 に答える 2

1

ビューの関係機能を使用してみましたか? これを使用して、すべてのコンテンツ タイプのすべての日付フィールドにアクセスし、フィールド アイテムに条件付きコードを追加すると、ゴールデンになるはずです。(つまり、質問を正しく理解していれば...)

于 2012-08-02T14:41:59.513 に答える
0

多くの可能な解決策を見つけて、ここにまとめました: https://drupal.org/node/2133879

ただし、これは私がお勧めする簡単な解決策です。

カスタム モジュールでは、hook_views_query_alter() 関数を使用してソート基準を変更し、CASE ... WHEN を使用して orderby 条件に条件を追加します。良い例を次に示します。

<?php
/**
 * Implements hook_views_query_alter
 * @param type $view
 * @param type $query
 */
function MODULE_views_query_alter(&$view, &$query) {
  if ($view->name == 'views_name' && $view->current_display == 'display_name') {
    $query->orderby = array(
      array(
        'field' => 'CASE WHEN field_data_field_date_publication.field_date_publication_value
THEN field_data_field_date_publication.field_date_publication_value 
ELSE node.created END',
        'direction' => 'DESC',
      )
    );
  }
}
?>
于 2013-11-20T20:59:43.633 に答える