Drupal Views API, добавить простой обработчик аргументов - PullRequest
2 голосов
/ 16 июня 2010

Справочная информация: у меня есть сложная форма поиска, которая хранит запрос и его хэш в кэше. Как только кеш настроен, я перенаправляю на что-то вроде /searchresults/e6c86fadc7e4b7a2d068932efc9cc358, где эта большая длинная строка в конце - это хэш md5 моего запроса. Мне нужно дать новый аргумент для представлений, чтобы знать, для чего нужен хеш.

Причина всей этой суеты в том, что моя оригинальная форма поиска очень сложна и содержит множество аргументов, чтобы рассмотреть возможность поместить их всех в путь и ожидать выполнения фильтрации с аргументами обычных представлений.

Теперь на мой вопрос. Я читал документацию Views 2, но не выяснил, как выполнить этот пользовательский аргумент. Мне не кажется, что это должно быть так сложно, как мне кажется, как должно быть. Оставляя в стороне любые знания об API veiws, может показаться, что все, что мне нужно, это функция обратного вызова, которая будет принимать аргумент из пути, поскольку он является единственным аргументом, и возвращать список идентификаторов узлов для фильтрации.

Может кто-нибудь указать мне решение или дать пример кода?

Спасибо за вашу помощь! Вы, ребята, великолепны.

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

1 Ответ

1 голос
/ 17 июня 2010

Это не так просто, как хотелось бы.

В представлениях аргументы используются для возврата объектов, пользователя, узла, термина, пользовательского объекта.Таким образом, вы можете создать собственный код, чтобы получить «объект запроса».Это был бы только первый шаг.Затем вам нужно получить информацию из объекта запроса.Вы можете попробовать связать пользовательские отношения с узлами или создать собственный фильтр, чтобы сделать SQL необходимым.Это может быстро привести к путанице во времени.

Вместо этого я бы предложил использовать hook_views_query_alter, что позволит вам изменить запрос.Поскольку у вас уже есть SQL, нужно просто проверить хеш, и, если он есть, изменить запрос.Должно быть довольно простым делом.Единственное, что немного сложно, это то, что вы должны сделать запрос с помощью объекта запроса, который использует представление, но это не так сложно выяснить.

...