Как получить доступ ко всем внешним страницам в модуле opencart?

Есть ли способ создать модуль OpenCart, который имеет доступ ко всем (интерфейсным) страницам магазина? Я хочу, чтобы пользователю не приходилось «привязывать» этот модуль ко всем макетам, чтобы он существовал на всех страницах. По сути, я хочу создать модуль, который вводит некоторый код js на каждую страницу приложения и, в зависимости от некоторых хуков OpenCart на серверной части, запускает дополнительный код js на передней панели или некоторые запросы API на серверной части. Спасибо


person paptom    schedule 30.12.2016    source источник
comment
Вы пытались изменить нижний колонтитул или заголовок через vQmod или ocmod?   -  person DigitCart    schedule 30.12.2016


Ответы (1)


Я не уверен, что именно вы ищете, говоря, что вы хотите, чтобы модуль имел «доступ» ко всем (интерфейсным) страницам магазина. Модули должны быть размещены в макетах, а макеты могут быть назначены нескольким страницам.

Каждый макет может иметь элементы, назначенные специально для областей, которые вы можете назначить (и настроить). Например, вы можете захотеть создать специальное место для вашего модуля в общем заголовке. Вы просто создадите файлы контроллера, языка и представления в папке по вашему собственному назначению (в моем примере я буду использовать общую папку), и давайте назовем эти файлы «loadjs».

Образуйте их после файлов common/header.php и .tpl. Просто не забудьте изменить имена классов и файлов в файле контроллера, чтобы они совпадали. Таким образом, вы должны создать файл loadjs.php в общем каталоге папки контроллера, который содержит класс ControllerCommonLoadjs, файл loadjs.php в папке language/(your language)/common и файл loadjs.tpl в папке view/theme/(your theme name)/template/common.

Добавьте $data['loadjs'] = $this->load->controller('common/loadjs'); в файл controller/common/header.php и <?php echo $loadjs; ?> в файл view/theme/(your theme name)/template/common/header.tpl. Теперь вы можете создать свой модуль.

Однако, чтобы иметь возможность добавить его в свой макет, вам нужно будет внести некоторые изменения в некоторые файлы администратора. Add $_['text_loadjs'] = 'Loadjs'; в файл admin/language/(your language)/design/layout.php и $data['text_loadjs'] = $this->language->get('text_loadjs'); в файл admin/controller/design/layout.php.

Вам также нужно будет внести изменения в файл admin/view/template/design/layout_form.tpl. Найдите следующий код:

<option value="content_top" selected="selected"><?php echo $text_content_top; ?></option>
<?php } else { ?>
<option value="content_top"><?php echo $text_content_top; ?></option>
<?php } ?>
<?php if ($layout_module['position'] == 'content_bottom') { ?>
<option value="content_bottom" selected="selected"><?php echo $text_content_bottom; ?></option>
<?php } else { ?>
<option value="content_bottom"><?php echo $text_content_bottom; ?></option>
<?php } ?>

и добавьте следующий код чуть ниже этого:

<?php if ($layout_module['position'] == 'loadjs') { ?>
<option value="loadjs" selected="selected"><?php echo $text_loadjs; ?></option>
<?php } else { ?>
<option value="loadjs"><?php echo $text_loadjs; ?></option>
<?php } ?>

Теперь войдите в свою панель инструментов OpenCart и добавьте свой модуль в позицию loadjs на вашем макете. И это должно сделать это.

person JasonF    schedule 30.12.2016
comment
большое спасибо за ваш комментарий. Я хочу добавить javascript в заголовок независимо от темы и без редактирования каких-либо файлов пользователем. Это возможно? - person paptom; 03.01.2017
comment
Хорошо, вам не нужно добавлять модуль для этого. Я предполагаю, что из вашего первоначального запроса на доступ ко всем внешним страницам сайта вы хотите разместить один и тот же javascript на каждой странице. Если это все, что вам нужно, и все ваши страницы используют один и тот же файл view/theme/(название вашей темы или по умолчанию)/template/common/header.tpl, тогда все, что вам нужно сделать, это добавить javascript непосредственно в заголовок ( по крайней мере, это самый простой и прямой способ.) Есть и другие способы, но они становятся все более сложными. - person JasonF; 04.01.2017
comment
Если вы используете файл header.tpl по умолчанию, вам нужно будет добавить javascript только один раз, независимо от того, какую тему вы выберете. Если вы используете настроенные файлы header.tpl в каждой из ваших тем, вам нужно будет добавить javascript в каждый файл header.tpl темы. - person JasonF; 04.01.2017
comment
Я разрабатываю модуль, использующий события / крючки opencart, такие как проверка / вход в систему и т. Д., Для создания реферальной схемы. Поэтому я стремился к более простой установке для пользователей модуля. Но насколько я понимаю, мы не можем избежать шага, когда пользователям нужно добавить javascript в файл header.tpl своей темы. Я прав? - person paptom; 04.01.2017
comment
Извините, может быть, я неправильно понимаю ваш вопрос. Вы разрабатываете какую-то тему, которую вы либо продаете, либо отдаете другим? Зачем пользователю изменять файл .tpl или любой из программных файлов OpenCart? - person JasonF; 04.01.2017
comment
Я разрабатываю плагин/модуль, который использует события для разработки реферальной программы. Все это также связано с всплывающим окном javascript (таким образом, требуется javascript во главе). Короче говоря, пользователи что-то покупают и рекомендуют своим друзьям. Если один из друзей входит в магазин, в правой нижней части появляется всплывающее окно, сообщающее ему, что у него есть купон на скидку. Это яснее? Еще раз очень ценю, что вы нашли время для этого. - person paptom; 05.01.2017
comment
Спасибо за добавленное объяснение и время, которое вы потратили на это. Позвольте мне посмотреть, правильно ли я вас понимаю: вам нужно настроить плагин/модуль, чтобы, когда один из ваших пользователей ссылается на друга (я полагаю, это будет сделано через модуль на одной из страниц их учетной записи) и этот друг регистрируется с вашим магазином, когда они войдут в систему, появится всплывающее окно, сообщающее им, что у них есть купон на скидку. Какое событие приведет к исчезновению купона? - person JasonF; 07.01.2017