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


10

Я имею представление о типе контента, который содержит два разных поля даты (одно с повторениями даты и одно многозначные отдельные даты). В любой момент времени заполняется только одно поле даты. В представлении представления я объединил два поля, скрыв первое поле даты и переписав второе, включая маркер замены первого и второго. Есть ли способ теперь использовать переписанное поле для сортировки представления в порядке возрастания на основе этого комбинированного поля даты? Похоже, он сортирует его на основе исходного значения поля даты.

Я провел свое исследование и нашел только старые, несколько связанные темы, с тупиками.

сортировка просмотров по переписанному полю?

Таблица сортируется не по переписанному полю, а по исходному полю

Просмотры: настраиваемое поле для критериев сортировки

Сортировать по глобальному: пользовательский текст. Является ли это возможным?

Я надеялся, что есть новый или хитрый способ добиться этого.


Есть ли причина, по которой вы не можете использовать ответ merlinofchaos? drupal.org/node/1260160#comment-4907526
Кари Кяряйайнен,

На самом деле он не дает ответа о том, как использовать вычисляемое поле. Он просто рекомендует его использовать. Я не против попробовать, но я не знаю, что делать с модулем. Я также надеялся, что может быть что-то новое, чтобы попробовать, так как это было 2 года назад и для Drupal 6.
Найджел Уотерс

Да, это был короткий ответ. Принцип все тот же, хотя. Смотри мой ответ.
Кари Kääriäinen

Что вы хотите сделать с этими полями даты? Выбрать следующее свидание?
Кари 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']

Теперь у вас есть сортируемое поле, которое вы можете использовать в представлениях, но сначала вам нужно обновить все узлы, так как вычисляемое поле будет только вычислено и сохранено в базе данных при сохранении узла. Есть много способов сделать это, один из которых использует Bulk Operations Views, он дает вам возможность повторно сохранить узлы в admin / content.


Я не уверен, что это будет работать с одним полем даты с повторяющимися датами и другим полем с одной датой (с установкой неограниченно). Это может работать в случае, когда оба поля имеют только одно значение.
Найджел Уотерс

Я отредактировал свой ответ на эти случаи. Используя dpm ($ entity) вы можете увидеть структуру ваших полей даты. dpm поставляется с модулем Devel.
Кари Kääriäinen

Пожалуйста, не рекомендуйте [und]синтаксис. Вместо этого используйте field_get_items.
Летарион

1

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


drupal.org/project/partial_date имеет возможность интеграции с представлениями
Bala

0

Единственный хитрый способ сделать это - если вы не используете нумерацию страниц, то вы можете использовать сортировку PHP в пользовательском переопределении запроса, которое не зависит от базы данных.

По словам стивектора ,

Нумерация страниц - это то, что действительно мешает нам сортировать по вычисленным полям, потому что обычно мы должны сказать «База данных! Получите результаты 21-30 при сортировке по столбцу nid».

Таким образом, вы не можете надежно получить результаты 21-30 из БД, если БД не знает, как определить 21-30 (как в случае вычисляемого поля).

Таким образом, наиболее практичным и надежным решением является использование Computed Field, как упомянуто Kari Kääriäinen.


Похоже, кто-то отказался от меня после того, как я указал номер версии и исправил ошибку вставки копии. Что-то не так с этим ответом?
Бэт

Ранее я проголосовал за модульный подход, но позже проголосовал против, потому что это, как и любой другой, включая мой, не пригодный для использования ответ, потому что сам вопрос все еще неясен, по крайней мере для меня.
Кари Kääriäinen

Вопрос кажется мне понятным. Я добавлю некоторые разъяснения к моему ответу.
Beth

Не берите в голову, я понял, что Представления не ведут себя точно так же, как я.
Beth

0

Это немного хакерский способ сделать это, но он работает, и вам не нужны никакие дополнительные модули.

Создайте метку для поля, по которому вы хотите отсортировать, и НЕ исключайте его из отображения. Вместо этого переписать отображение как «пустое», добавив пустой <!---->комментарий HTML в качестве значения перезаписи. Затем добавьте другое поле php / rewritten в качестве дочернего элемента этого столбца.

Это отобразит заголовок таблицы для правильного столбца для сортировки.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.