Drupal Views API, добавить простой обработчик аргументов
Справочная информация: у меня есть сложная форма поиска, которая хранит запрос и его хэш в кэше. Как только кеш настроен, я перенаправляю на что-то вроде /searchresults/e6c86fadc7e4b7a2d068932efc9cc358
где эта большая длинная строка в конце - хэш md5 моего запроса. Мне нужно привести новый аргумент для представлений, чтобы знать, для чего нужен хеш.
Причина всей этой суеты заключается в том, что моя первоначальная форма поиска является сложной и имеет много аргументов, чтобы рассмотреть возможность размещения их всех в пути и ожидания выполнения фильтрации с аргументами обычных представлений.
Теперь на мой вопрос. Я читал документацию Views 2, но не выяснил, как выполнить этот пользовательский аргумент. Мне не кажется, что это должно быть так сложно, как мне кажется, как должно быть. Оставляя в стороне какие-либо знания об API veiws, может показаться, что все, что мне нужно, - это функция обратного вызова, которая будет принимать аргумент из пути, поскольку он является единственным аргументом, и возвращать список идентификаторов узлов для фильтрации.
Может кто-нибудь указать мне на решение или дать мне пример кода?
Спасибо за вашу помощь! Вы, ребята, великолепны.
PS. Я почти уверен, что мой дизайн - лучшее, что я могу придумать, давайте не будем отвлекаться от моего вопроса и перепроверить мою логику дизайна, если мы сможем помочь.
1 ответ
Это не так просто, как хотелось бы.
В представлениях аргументы используются для возврата объектов, пользователя, узла, термина, пользовательского объекта. Таким образом, вы можете сделать некоторый пользовательский код, чтобы получить "объект запроса". Это был бы только первый шаг. Затем вам нужно получить информацию из объекта запроса. Вы можете попробовать связать пользовательские отношения с узлами или создать собственный фильтр, чтобы сделать SQL необходимым. Это может быстро стать путаницей времени.
Вместо этого я бы предложил вам использовать hook_views_query_alter
, что позволит вам изменить запрос. Поскольку у вас уже есть SQL, нужно просто проверить хеш, и, если он есть, изменить запрос. Должно быть довольно простым делом. Единственное, что немного сложнее, это то, что вы должны сделать запрос с помощью объекта запроса, который использует view, но это не так сложно выяснить.