書き換えられたフィールドに基づいてビューをソートするにはどうすればよいですか?


10

2つの異なる日付フィールド(1つは日付の繰り返し、もう1つは複数値の単一の日付)を含むコンテンツタイプのビューがあります。常に1つの日付フィールドのみが入力されます。ビューの表示では、最初の日付フィールドを非表示にし、2番目のフィールドを書き換えて、1番目と2番目の置換トークンを含めて、2つのフィールドを結合しています。書き換えられたフィールドを使用して、この結合された日付フィールドに基づいてビューを昇順に並べ替える方法はありますか?日付フィールドの元の値に基づいてソートされているようです。

私は自分の調査を行い、古い、やや関連のある、行き止まりのあるスレッドのみを見つけました。

書き換えられたフィールドでソートするビュー?

テーブルは、書き換えられたフィールドではなく、元のフィールドでソートされます

ビュー:並べ替え条件のカスタムフィールド

グローバル:カスタムテキストで並べ替えます。出来ますか?

これを実現する新しい方法または卑劣な方法があることを願っていました。


merlinofchaosの回答を使用できない理由はありますか?drupal.org/node/1260160#comment-4907526
KariKääriäinen2013

彼は実際に計算されたフィールドの使用方法についての答えを提供していません。彼はそれを使用することをお勧めします。試してみてもかまいませんが、モジュールの処理方法がわかりません。また、私はそれがDrupalの6の2年前だったとので、試して何か新しいことがあるかもしれないと期待
ナイジェル・ウォーターズ

ええ、それは短い答えでした。原則はまだ同じです。私の答えを見てください。
KariKääriäinen13年

これらの日付フィールドをどのように処理しますか?来る次の日付を選びますか?
KariKääriäinen2013

イベントのコンテンツタイプを2つの日付フィールドで昇順に並べ替えたい。
Nigel Waters

回答:


4

モジュールルートに行きたくない場合、これは1つの選択肢です:

1)計算フィールドモジュールをインストールする
2)コンテンツタイプに計算フィールドを追加する
3)フィールド設定で、計算コード(PHP)テキストエリアでフィールドデータにアクセスできる

現在の言語の日付フィールドを変数に取得します。

$repeating_dates = field_get_items($entity_type, $entity, 'field_repeating_date_example');
$multidates = field_get_items($entity_type, $entity, 'field_multidate_example');

日付の値は次の場所にあります

$repeating_dates[0]['value'],
$repeating_dates[1]['value'],
$repeating_dates[2]['value'], etc.

$multidates[0]['value'],
$multidates[1]['value'],
$multidates[2]['value'], etc.

日付フィールドで必要なロジックを実行し、結果を割り当てます

$entity_field[0]['value']

これで、ビューで使用できる並べ替え可能なフィールドがありますが、計算フィールドはノードの保存時にのみ計算されてデータベースに保存されるため、最初にすべてのノードを更新する必要があります。これを行うには多くの方法があります。1つはViews一括操作を使用する方法で、admin / contentでノードを再保存するオプションを提供します。


これが繰り返しの日付を含む1つの日付フィールドと単一の日付を含む別のフィールド(無制限の設定)で機能するかどうかはわかりません。これは、両方のフィールドが単一の値のみである場合に機能します。
Nigel Waters

私はそれらのケースをカバーして私の答えを編集しました。dpm($ entity)を使用すると、日付フィールドの構造を確認できます。dpmにはDevelモジュールが付属しています。
KariKääriäinen2013

[und]構文はお勧めしません。代わりにfield_get_itemsを使用してください。
Letharion 2013


0

これを実現する唯一の卑劣な方法は、ページネーションを使用しない場合、データベースに依存しないカスタムクエリのオーバーライドでPHPの並べ替えを使用できることです。

stevectorによると、

通常、「データベース!nid列で並べ替えると21〜30の結果が表示される」と言う必要があるため、ページ分割が計算フィールドによる並べ替えを実際に妨げています。

したがって、dbが21〜30を定義する方法を知らない場合(計算フィールドの場合など)、dbから21〜30の結果を確実に取得することはできません。

したがって、最も実用的で信頼性の高いソリューションは、KariKääriäinenが述べたように計算フィールドを使用することです。


バージョン番号を指定してコピーペーストエラーを修正した後、誰かが私に反対票を投じたようです。この答えに何か問題がありますか?
2013

私は以前にモジュールアプローチに賛成票を投じましたが、これは他の質問と同じように、質問自体がまだはっきりしないため、有効な回答ではありません。
KariKääriäinen2013

質問は私には明らかなようです。私の回答にいくつかの説明を追加します。
2013

気にしないでください、私はビューが私とまったく同じように動作しないことに気づきました。
2013

0

これは少しハックな方法ですが、機能し、追加のモジュールは必要ありません。

ソートしたいフィールドのラベルを作成し、表示から除外しないでください。代わりに、書き換え<!---->値として空のhtml コメントを追加して、表示を「空白」に書き換えます。次に、他のphp / rewrittenフィールドをこの列の子として追加します。

これにより、並べ替え用の正しい列のテーブルヘッダーが表示されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.