Как я могу добавить строки в шаблон модуля расширения администратора WHMCS {headoutput}?

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

Я пытаюсь закодировать дополнительный модуль для WHMCS 5 и хочу использовать модальные окна начальной загрузки на страницах моего дополнения. Я пытаюсь добавить строки css и js на главную страницу моего аддона. Я хочу поместить их в тег head с помощью кодирования, я не хочу изменять файл шаблона, и я знаю, что это возможно сделать, потому что модуль «Планировщик проектов WHMCS» делает это успешно. Я вижу это в исходных кодах страниц.

Когда я заглянул в файл «header.tpl» шаблона администратора, я обнаружил два умных кода. {headeroutput} и {headeroutput}. Они расположены, как показано ниже;

<head>
  {headoutput}
</head>
<body>
  {headeroutput}

Я провел много исследований о том, как отправить мой код в {headoutput} с помощью файла .php моего модуля. Если кто-нибудь знает, как это сделать, пожалуйста, мне очень нужна помощь.

Ваша помощь очень ценится. С уважением, Канер


person Caner SAYGIN    schedule 15.10.2014    source источник


Ответы (1)


Я нашел решение для чтения дополнительных документов в документации WHMCS и некоторых других местах.

Прежде всего, как я узнал, после WHMCS 4 разработчики изменили некоторые правила, и умные элементы WHMCS {headoutput} и {headeroutput} в шаблонах больше не редактируются непосредственно кодом. WHMCS использует хуки для добавления пользовательских кодов между специальными HTML-блоками. И вот решение моей проблемы.

Док. Ссылка 1: http://docs.whmcs.com/Hooks
Док. Ссылка 2: http://docs.whmcs.com/Hooks:System

После того, как мы сделали все необходимое для создания дополнительного модуля, мы создаем новый файл в папке модуля с именем «hooks.php». WHMCS включает этот файл напрямую, без каких-либо исключений для включения, в наш модуль. В «hooks.php» нам нужно создать функцию-ловушку, как описано в Doc. Ссылка 1. У вашей функции не должно быть специального имени, но разработчик WHMCS советует вам использовать иерархию, например, начиная с «hook_», за которой следует имя файла, а затем конкретное действие или задача, которую выполняет ловушка. Например;

function hook_youraddonmodule_adminHeadBlock($vars) {
    //Here is my custom code below
    $headoutput = '<link href="../includes/jscript/css/bootstrap.min.css" rel="stylesheet">';
    return $headoutput;
}

После того, как вы назовете функцию, вы должны ввести свой код между фигурными скобками в соответствии с вашими потребностями. Я поместил ссылку на файл bootstrap css, которую я хотел включить во все заголовочные блоки моих страниц модуля. Мы объявили функцию ловушки, а затем нам нужно подготовить ее для использования предопределенными местами ловушек WHMCS, как описано в Doc. Ссылка 2. Чтобы поместить код между головным блоком, мы должны использовать деклерацию хука "AdminAreaHeadOutput". Вот код, который я использовал;

// Define Client Login Hook Call
add_hook("AdminAreaHeadOutput",1,"hook_youraddonmodule_adminHeadBlock");

Это определение означает, что мы добавили хук в вывод заголовка административной области, и его приоритет является первым (1). На самом деле я не знаю, почему нам нужен приоритет в отношении хуков, и я не проводил исследования по этому поводу, но если это было сделано, то в этом должно быть преимущество :) Теперь все, что вам нужно сохранить файл хука и загрузить его на свой сервер. Все сделано. Я надеюсь, что это поможет людям, которые ищут такие трюки.

Обновление:

Я обнаружил, что когда вы создаете хук и активируете его с помощью своего модуля в своей области администратора, он применяется ко всем страницам администратора, поэтому он может нарушить некоторые стандартные javascripts и стили whmcs. Если вы хотите, чтобы хук работал только для вашего собственного модуля, вы должны добавить код, как показано ниже, чтобы предотвратить применение ваших собственных кодов на всех страницах области администрирования.

$moduleName = $_GET['module'];
if($moduleName == "yourmodulename"){
    return $headoutput;
}

С уважением,
Канер.

person Caner SAYGIN    schedule 16.10.2014
comment
Результаты поисковой системы по изменению раздела заголовка постоянно приводили меня к наследованию шаблонов Smarty и функции {extends}. К сожалению, WHMCS в настоящее время поддерживает только Smarty 2.x, а наследование шаблонов не было реализовано до Smarty 3. Ваше решение работало отлично. Спасибо тебе за это! - person Seth McCauley; 02.11.2014
comment
Добро пожаловать, я признал недостаток этого решения и сделал обновление. Пожалуйста, проверьте это тоже. С уважением. - person Caner SAYGIN; 03.11.2014
comment
Да, я видел, что это применяется везде, поэтому мой обходной путь заключался в создании определенного идентификатора div, чтобы ограничить css модулем. Я попробую дополнительный код. Спасибо. - person Seth McCauley; 05.11.2014
comment
Наш модуль ожидает параметр номера страницы через запрос на получение (т.е. &page=1). С приведенным выше кодом $moduleName возвращал mymodulename&page=1 из-за взрыва только разбивая его знаком равенства. Вместо этого вы можете использовать $_GET['module'], так как это будет точно соответствовать параметру module=yourmodulename: - person Seth McCauley; 14.11.2014
comment
Например, попробуйте заменить $site = $_SERVER[REQUEST_URI]; и $moduleName = explode('=',$site); на $moduleName = $_GET['module'];, а затем заменить if($moduleName[1] == "yourmodulename"){ на if($moduleName == "yourmodulename"){. - person Seth McCauley; 14.11.2014
comment
Мне все еще нужно было ограничить css разделом модулей страницы с идентификатором div, так как css (из другого приложения, которое я интегрирую в модуль) переопределял css боковой панели. Благодаря предоставленному вами дополнительному коду я смог ограничить любые изменения css только страницей, отображающей модуль, что, безусловно, является более безопасным способом сделать это. - person Seth McCauley; 14.11.2014
comment
Да, ты прав. Ваш метод безопаснее, и я обновляю код. Спасибо за улучшение. - person Caner SAYGIN; 15.11.2014