Как я могу изменить результат фильтра списка основных путей?


Основной модуль пути определяет страницу admin/config/search/path, которая содержит список всех псевдонимов пути.

Крючок меню в модуле вызывает функцию path_admin_overview в path.admin.inc, которая выполняет запрос для получения списка псевдонимов URL:

$query->condition('alias', '%' . preg_replace('!\*+!', '%', $keys) . '%', 'LIKE');

Что я хотел бы сделать, так это каким-то образом перехватить этот запрос и изменить условие в пользовательском модуле (конечно, чтобы избежать взлома ядра). Чтобы быть более точным, я хочу сделать возможным расширение условия для поиска source столбец, а также столбец alias, как указано выше.

Моей первой мыслью было перехватить форму списка администраторов пути: path_admin_filter_form, которую я сделал с помощью hook_form_alter. Затем я надеялся, что каким-то образом смогу переопределить существующий обработчик отправки или присоединить второй, который вызовет path_admin_overview, но, конечно, я не могу напрямую изменить эту основную функцию.

Так что, похоже, мне придется сделать свою собственную копию path_admin_overview и изменить код внутри, а затем вызвать это вместо. Конечно, это тоже не кажется правильным - так как, если модуль пути изменится, модуль отстанет.

Есть ли какой-то крючок или шаблон, который я могу использовать здесь, чтобы изменить запрос в path_admin_overview или иным образом достичь цели, выделенной жирным шрифтом в отдельном модуле?

РЕДАКТИРОВАТЬ: Похоже, это было бы возможно, если бы запрос в path_admin_overview был помечен (в настоящее время это не так), см. Здесь: https://www.drupal.org/node/310077#hook_query_alter

Author: njp, 2015-11-26

1 answers

Вы можете переопределить путь admin/config/search/path с помощью hook_menu_alter и использовать пользовательскую функцию в качестве обратного вызова меню.

function oyurmodule_menu_alter(&$items) {
  $items['admin/config/search/path']['page callback'] = 'mymodule_custom_path_admin_overview'; 
}

Тогда ваш mymodule_custom_path_admin_overview должен быть копией path_admin_overview с необходимыми изменениями.

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

 2
Author: sanzante, 2015-11-30 12:24:47