Как я могу изменить результат фильтра списка основных путей?
Основной модуль пути определяет страницу 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
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
, должны применяться к вашей измененной функции, но это единственный способ изменить функциональность без взлома ядра.