Як можна сортувати подання на основі переписаного поля?


10

У мене є вид типу вмісту, який містить два різні поля дати (одне з повторенням дат і одне багатозначне однозначне дати). У будь-який час заповнюється лише одне поле дати. У вікні перегляду я поєднав два поля, приховавши поле першого дати та переписав друге, включаючи маркер заміни першого та другого. Чи є зараз спосіб використовувати переписане поле для сортування подання у порядку зростання, виходячи із цього комбінованого поля дати? Здається, її сортують на основі вихідного значення поля дати.

Я провів своє дослідження і знайшов лише старі, дещо пов’язані, нитки із тупиками.

сортування переглядів за переписаним полем?

Таблиця сортується не за переписаним полем, а за оригінальним полем

Перегляди: спеціальне поле для критеріїв сортування

Сортувати за глобальним: нестандартний текст. Це можливо?

Я сподівався, що існує новий або підлий спосіб зробити це.


Чи є якась причина, що ви не можете використати відповідь merlinofchaos? drupal.org/node/1260160#comment-4907526
Kari Kääriäinen

Він насправді не дає відповіді про те, як використовувати обчислене поле. Він просто рекомендує використовувати його. Я не проти спробувати, але не знаю, що робити з модулем. Я також сподівався, що можна спробувати щось нове, оскільки це було 2 роки тому і для Drupal 6.
Найджел Уотерс

Так, це була коротка відповідь. Принцип все ж той самий. Дивіться мою відповідь.
Kari Kääriäinen

Що ви хочете зробити з цими полями дати? Оберіть наступну дату, яка настає?
Kari Kääriäinen

Я хочу сортувати тип вмісту події за двома полями дати у порядку зростання.
Найджел Уотерс

Відповіді:


4

Якщо ви не хочете їхати по маршруту модуля, це одна з альтернатив:

1) встановити модуль Computed Field
2) додати обчислене поле до типу вмісту
3) у налаштуваннях поля, у текстовій області Computed code (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']

Тепер у вас є сортоване поле, яке ви можете використовувати в представленнях, але спочатку вам доведеться оновити всі вузли, оскільки обчислене поле буде обчислюватися і зберігатися в базі даних при збереженні вузла. Існує багато способів зробити це. Один з них використовує Перегляд масових операцій, він дає вам можливість знову зберегти вузли в адміністраторі / вмісті.


Я не впевнений, що це буде працювати з одним полем дати з повторюваними датами та іншим полем з однією датою (із встановленням необмеженого). Це може працювати в тому випадку, коли обидва поля є лише одиничними значеннями.
Найджел Уотерс

Я відредагував свою відповідь на ці випадки. Використовуючи dpm ($ сутність), ви можете побачити структуру полів вашої дати. dpm поставляється з модулем Devel.
Kari Kääriäinen

Не рекомендуйте [und]синтаксис. Використовуйте замість field_get_items.
Летаріон

1

Я думаю, що ви можете це зробити за допомогою Natural Natural Sort . У ньому є можливість сортування полів серед засобів - Увімкнути сортування за конкретними полями . Якщо ви будете дотримуватися цього підручника, ви отримаєте ідею !!.


drupal.org/project/partial_date у нього є можливість інтегруватися з видами
Бала

0

Єдиний підлий спосіб зробити це - якщо ви не використовуєте сторінки, то ви можете використовувати сортування PHP у користувальницькому заміні запиту, який не покладається на базу даних.

За словами stevector ,

Пагинація - це те, що насправді заважає нам сортувати за обчислюваними полями, тому що зазвичай нам потрібно сказати "База даних! Отримайте мені результати 21-30 під час сортування за стовпцем nid".

Таким чином, ви не можете надійно отримати результати 21-30 від db, якщо db не знає, як визначити 21-30 (як у випадку з обчисленим полем).

Тому найпрактичнішим та надійним рішенням є використання обчислюваного поля, як згадував Карі Каріайнен.


Схоже, хтось порушив мене, коли я вказав номер версії та виправив помилку вставлення копії. Чи щось не так у цій відповіді?
beth

Раніше я виступав за модульний підхід, але пізніше відмовився, оскільки це, як і будь-який інший, включаючи мою, не є корисною відповіддю, оскільки саме питання, як мінімум, для мене ще незрозуміле.
Kari Kääriäinen

Питання мені здається зрозумілим. Я додам трохи пояснень до своєї відповіді.
beth

Незважаючи на це, я зрозумів, що Погляди не ведуть себе так, як я, хоча це і є.
beth

0

Це трохи хакітний спосіб зробити це, але він працює, і вам не потрібні додаткові модулі.

Створіть мітку для поля, за яким потрібно сортувати, і НЕ виключайте його з відображення. Замість цього перепишіть дисплей як "порожній", додавши порожній html <!---->коментар як значення перезапису. Потім додайте інше поле php / переписане як дочірнє в цю колонку.

Це відобразить заголовок таблиці для правильного стовпця для сортування.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.