Круговая сортировка в Drupal 6, CCK & Views - PullRequest
2 голосов
/ 24 марта 2011

Сегодня у меня был интересный запрос от клиента, и я не совсем уверен, что лучший способ решить его с помощью Drupal Views. В настоящее время у них есть тип контента «Участник команды», который представляет членов их персонала. На каждой странице сотрудника есть ссылка на все остальные страницы сотрудника. Пока это не проблема.

Они хотят, чтобы этот список начинался с человека, на которого мы сейчас смотрим, а затем продолжал с того, кто падает сразу после них в «отсортированном» порядке. Затем, когда он достигает конца списка, он оборачивается и начинается сначала, пока не вернется к себе (аналогично тому, как будет работать Круговой связанный список).

Так, например, предположим, что у меня есть члены команды A, B, C, D, E, F и G:

  • Если я смотрю на члена команды A, список имеет следующий порядок: A, B, C, D, E, F, Г.
  • Если я смотрю на члена команды D, список выглядит следующим образом: D, E, F, G, A, B, C.
  • Если я смотрю на члена команды G, список имеет следующий порядок: G, A, B, C, D, E, F.

Если бы я имел дело с какой-то другой структурой данных в обычной среде программирования, я уверен, что мог бы придумать какой-то алгоритм, чтобы определить, где мы сейчас находимся, начать сортировку и выдумать «круговой список». Виды кажутся немного более хитрыми.

Единственное потенциальное решение, о котором я могу подумать, - это создать два отдельных представления, а затем просто объединить результаты после факта.

  1. В одном представлении будет отсортированный список всех членов команды, у которых номер сортировки больше или равен текущему члену команды.
  2. Второе представление, представляющее собой отсортированный список всех членов команды, у которых номер сортировки меньше или равен текущему члену команды.

Мне просто любопытно, есть ли более эффективные способы сделать такого рода с помощью представлений?

Ответы [ 2 ]

1 голос
/ 24 марта 2011

Поскольку все ваши результаты могут содержаться на одной странице, вам, вероятно, лучше всего использовать упомянутое вами решение: манипулирование двумя представлениями (вероятно, в шаблоне, как предлагает Освальд), чтобы одно отображалось за другим. Однако, если вы в итоге получите много результатов и будете нуждаться в разбивке по страницам ... вам, вероятно, потребуется проделать определенную работу по вычислению разницы между числами сортировки и использованию этого значения в ORDER BY ... все это требует сложных задача переписывания основного запроса Views.

Я попробовал это несколько лет назад, и у меня были огромные трудности ... Мерлин из Chaos, главный разработчик Views, просто где-то заявил, что Views действительно не предназначен для необычного программирования и что способ обработки запросов не допускайте больших манипуляций ... все сломалось бы. Однако за это время что-то изменилось ... Я помню, как увидел новую функцию в Views, которая, казалось, была сделана для переписывания основного запроса.

Вот руководство по переписыванию запроса представлений: http://blog.raisedeyebrow.com/2010/04/rewrite-a-views-query/

Обратите внимание: из-за множества вещей, происходящих в представлениях, вы должны создать много фиктивных записей, чтобы убедиться, что ничего не сломано - если вы переписываете запрос, он будет гораздо более подвержен ошибкам.

На самом деле, если вы знакомы со сборкой модулей в Drupal, для чего-то подобного может иметь смысл создать пользовательский модуль, который позволит вам лучше контролировать запрос и отображение. Это на самом деле может быть быстрее, чем много экспериментов и испытаний.

1 голос
/ 24 марта 2011

Мой выбор был бы темным слоем. Я думаю, это можно сделать с помощью функции предварительной обработки. Может быть, вам нужно переопределить файл шаблона. Модуль Theme Developer может рассказать вам, как визуализируется представление и какие переопределения возможны.

...