В сегодняшнем уроке:
- создадим формы в админ-панели ( номер, иконка и имя);
- выведем данные, из выше упомянутых форм, в нужное нам место (шапку OpenCart).
Будем править следующие файлы (делаем их копии):
\admin\controller\setting\setting.php
\admin\view\template\setting\setting.tpl
\admin\language\russian\setting\setting.php
\admin\language\russian\russian.php
\catalog\controller\common\header.php
\catalog\view\theme\default\template\common\header.tpl
1.0. Начнем с
\admin\controller\setting\setting.php
1.1. ищем:
this->data['entry_address'] = $this->language->get('entry_address');
после вставляем:
// контакты - подключаем вывод языкового модуля. $this->data['entry_contact_namber'] = $this->language->get('entry_contact_namber'); $this->data['entry_contact_icon'] = $this->language->get('entry_contact_icon'); $this->data['entry_contact_name'] = $this->language->get('entry_contact_name'); $this->data['entry_contact_margin_left'] = $this->language->get('entry_contact_margin_left'); $this->data['entry_contact_img_from'] = $this->language->get('entry_contact_img_from');
1.2. находим:
$this->data['button_cancel'] = $this->language->get('button_cancel');
после вставляем:
$this->data['tab_contacts'] = $this->language->get('tab_contacts');
1.3. в этом же файле ищем:
$files = glob(DIR_SYSTEM . 'smsgate/*.php');
после вставляем:
// Покажет ошибку, если путь к папке с иконками задан не правильно. if (isset($this->error['img_from_error'])) { $this->data['error_config_contact_img_from'] = $this->error['img_from_error']; } else { $this->data['error_config_contact_img_from'] = ''; } // Покажет ошибку, если отступ указан неверно. if (isset($this->error['margin_left_error'])) { $this->data['error_config_contact_margin_left'] = $this->error['margin_left_error']; } else { $this->data['error_config_contact_margin_left'] = ''; }
1.4. далее по файлу находим:
if (isset($this->request->post['config_address'])) { $this->data['config_address'] = $this->request->post['config_address']; } else { $this->data['config_address'] = $this->config->get('config_address'); }
после вставляем:
// Добавляет и берет данные формы "Путь к папке с иконкой" if (isset($this->request->post['config_contact_img_from'])) { $this->data['config_contact_img_from'] = $this->request->post['config_contact_img_from']; } else { $this->data['config_contact_img_from'] = $this->config->get('config_contact_img_from'); } // Добавляет и берет данные формы "Отступ текста слева" if (isset($this->request->post['config_contact_margin_left'])) { $this->data['config_contact_margin_left'] = $this->request->post['config_contact_margin_left']; } else { $this->data['config_contact_margin_left'] = $this->config->get('config_contact_margin_left'); } ///contact 1 ------------------------------------------------------------------------ if (isset($this->request->post['config_contact_namber1'])) { $this->data['config_contact_namber1'] = $this->request->post['config_contact_namber1']; } else { $this->data['config_contact_namber1'] = $this->config->get('config_contact_namber1'); } if (isset($this->request->post['config_contact_icon1'])) { $this->data['config_contact_icon1'] = $this->request->post['config_contact_icon1']; } else { $this->data['config_contact_icon1'] = $this->config->get('config_contact_icon1'); } if (isset($this->request->post['config_contact_name1'])) { $this->data['config_contact_name1'] = $this->request->post['config_contact_name1']; } else { $this->data['config_contact_name1'] = $this->config->get('config_contact_name1'); } if (isset($this->request->post['config_contact_phontime1'])) { $this->data['config_contact_phontime1'] = $this->request->post['config_contact_phontime1']; } else { $this->data['config_contact_phontime1'] = $this->config->get('config_contact_phontime1'); } if (isset($this->request->post['config_contact_department1'])) { $this->data['config_contact_department1'] = $this->request->post['config_contact_department1']; } else { $this->data['config_contact_department1'] = $this->config->get('config_contact_department1'); } ///contact 2 ------------------------------------------------------------------------ if (isset($this->request->post['config_contact_namber2'])) { $this->data['config_contact_namber2'] = $this->request->post['config_contact_namber2']; } else { $this->data['config_contact_namber2'] = $this->config->get('config_contact_namber2'); } if (isset($this->request->post['config_contact_icon2'])) { $this->data['config_contact_icon2'] = $this->request->post['config_contact_icon2']; } else { $this->data['config_contact_icon2'] = $this->config->get('config_contact_icon2'); } if (isset($this->request->post['config_contact_name2'])) { $this->data['config_contact_name2'] = $this->request->post['config_contact_name2']; } else { $this->data['config_contact_name2'] = $this->config->get('config_contact_name2'); } if (isset($this->request->post['config_contact_phontime2'])) { $this->data['config_contact_phontime2'] = $this->request->post['config_contact_phontime2']; } else { $this->data['config_contact_phontime2'] = $this->config->get('config_contact_phontime2'); } if (isset($this->request->post['config_contact_department2'])) { $this->data['config_contact_department2'] = $this->request->post['config_contact_department2']; } else { $this->data['config_contact_department2'] = $this->config->get('config_contact_department2'); } ///contact 3 ------------------------------------------------------------------------ if (isset($this->request->post['config_contact_namber3'])) { $this->data['config_contact_namber3'] = $this->request->post['config_contact_namber3']; } else { $this->data['config_contact_namber3'] = $this->config->get('config_contact_namber3'); } if (isset($this->request->post['config_contact_icon3'])) { $this->data['config_contact_icon3'] = $this->request->post['config_contact_icon3']; } else { $this->data['config_contact_icon3'] = $this->config->get('config_contact_icon3'); } if (isset($this->request->post['config_contact_name3'])) { $this->data['config_contact_name3'] = $this->request->post['config_contact_name3']; } else { $this->data['config_contact_name3'] = $this->config->get('config_contact_name3'); } if (isset($this->request->post['config_contact_phontime3'])) { $this->data['config_contact_phontime3'] = $this->request->post['config_contact_phontime3']; } else { $this->data['config_contact_phontime3'] = $this->config->get('config_contact_phontime3'); } if (isset($this->request->post['config_contact_department3'])) { $this->data['config_contact_department3'] = $this->request->post['config_contact_department3']; } else { $this->data['config_contact_department3'] = $this->config->get('config_contact_department3'); } ///contact 4 ------------------------------------------------------------------------ if (isset($this->request->post['config_contact_namber4'])) { $this->data['config_contact_namber4'] = $this->request->post['config_contact_namber4']; } else { $this->data['config_contact_namber4'] = $this->config->get('config_contact_namber4'); } if (isset($this->request->post['config_contact_icon4'])) { $this->data['config_contact_icon4'] = $this->request->post['config_contact_icon4']; } else { $this->data['config_contact_icon4'] = $this->config->get('config_contact_icon4'); } if (isset($this->request->post['config_contact_name4'])) { $this->data['config_contact_name4'] = $this->request->post['config_contact_name4']; } else { $this->data['config_contact_name4'] = $this->config->get('config_contact_name4'); } if (isset($this->request->post['config_contact_phontime4'])) { $this->data['config_contact_phontime4'] = $this->request->post['config_contact_phontime4']; } else { $this->data['config_contact_phontime4'] = $this->config->get('config_contact_phontime4'); } if (isset($this->request->post['config_contact_department4'])) { $this->data['config_contact_department4'] = $this->request->post['config_contact_department4']; } else { $this->data['config_contact_department4'] = $this->config->get('config_contact_department4'); } ///contact 5 ------------------------------------------------------------------------ if (isset($this->request->post['config_contact_namber5'])) { $this->data['config_contact_namber5'] = $this->request->post['config_contact_namber5']; } else { $this->data['config_contact_namber5'] = $this->config->get('config_contact_namber5'); } if (isset($this->request->post['config_contact_icon5'])) { $this->data['config_contact_icon5'] = $this->request->post['config_contact_icon5']; } else { $this->data['config_contact_icon5'] = $this->config->get('config_contact_icon5'); } if (isset($this->request->post['config_contact_name5'])) { $this->data['config_contact_name5'] = $this->request->post['config_contact_name5']; } else { $this->data['config_contact_name5'] = $this->config->get('config_contact_name5'); } if (isset($this->request->post['config_contact_phontime5'])) { $this->data['config_contact_phontime5'] = $this->request->post['config_contact_phontime5']; } else { $this->data['config_contact_phontime5'] = $this->config->get('config_contact_phontime5'); } if (isset($this->request->post['config_contact_department5'])) { $this->data['config_contact_department5'] = $this->request->post['config_contact_department5']; } else { $this->data['config_contact_department5'] = $this->config->get('config_contact_department5'); } ///contact end ------------------------------------------------------------------------
1.5. найти:
if ((utf8_strlen($this->request->post['config_email']) > 96) || !preg_match('/^[^\@]+@.*\.[a-z]{2,6}$/i', $this->request->post['config_email'])) { $this->error['email'] = $this->language->get('error_email'); }
после вставить:
if ((utf8_strlen($this->request->post['config_contact_img_from']) < 3) || !preg_match('/^[\/][a-z]\S+[\/]\S+/i',$this->request->post['config_contact_img_from'])) { $this->error['img_from_error'] = $this->language->get('error_config_contact_img_from'); } if ((utf8_strlen($this->request->post['config_contact_margin_left']) < 0) || !preg_match('/^[0-9]/i',$this->request->post['config_contact_margin_left'])) { $this->error['margin_left_error'] = $this->language->get('error_config_contact_margin_left'); }
2.0. Открываем
\admin\view\template\setting\setting.tpl
находим:
<a href="#tab-general"><?php echo $tab_general; ?></a>
после вставляем:
<a href="#tab-store"><?php echo $tab_store; ?></a>
2.1. в этом же файле ищем:
<tr> <td><?php echo $entry_fax; ?></td> <td><input type="text" name="config_fax" value="<?php echo $config_fax; ?>" /></td> </tr> </table> </div>
после вставляем:
<div id="tab_contacts"> <?php echo $entry_contact_img_from; ?> <input type="text" style="width: 250px;" name="config_contact_img_from" value="<?php echo $config_contact_img_from; ?>" /> <?php if ($error_config_contact_img_from) { ?> <?php echo $error_config_contact_img_from; ?> <?php } ?> <?php echo $entry_contact_margin_left; ?> <input type="text" name="config_contact_margin_left" value="<?php echo $config_contact_margin_left; ?>" />px <?php if ($error_config_contact_margin_left) { ?> <?php echo $error_config_contact_margin_left; ?> <?php } ?> <table class="contact_list"> <thead> <tr> <td class="namber"> № </td> <td class="center"><?php echo $entry_contact_namber; ?></td> <td class="center"><?php echo $entry_contact_icon; ?></td> <td class="center"><?php echo $entry_contact_name; ?></td> </tr> </thead> <tbody> <tr> <td class="right">1</a> <td class="left"><input type="text" style="width: 250px;" name="config_contact_namber1" value="<?php echo $config_contact_namber1; ?>" /></td> <td class="left"><input type="text" style="width: 250px;" name="config_contact_icon1" value="<?php echo $config_contact_icon1; ?>" /></td> <td class="left"><input type="text" style="width: 250px;" name="config_contact_name1" value="<?php echo $config_contact_name1; ?>" /></td> </tr> <tr> <td class="right">2</a> <td class="left"><input type="text" style="width: 250px;" name="config_contact_namber2" value="<?php echo $config_contact_namber2; ?>" /></td> <td class="left"><input type="text" style="width: 250px;" name="config_contact_icon2" value="<?php echo $config_contact_icon2; ?>" /></td> <td class="left"><input type="text" style="width: 250px;" name="config_contact_name2" value="<?php echo $config_contact_name2; ?>" /></td> </td> </tr> <tr> <td class="right">3</a> <td class="left"><input type="text" style="width: 250px;" name="config_contact_namber3" value="<?php echo $config_contact_namber3; ?>" /></td> <td class="left"><input type="text" style="width: 250px;" name="config_contact_icon3" value="<?php echo $config_contact_icon3; ?>" /></td> <td class="left"><input type="text" style="width: 250px;" name="config_contact_name3" value="<?php echo $config_contact_name3; ?>" /></td> </td> </tr> <tr> <td class="right">4</a> <td class="left"><input type="text" style="width: 250px;" name="config_contact_namber4" value="<?php echo $config_contact_namber4; ?>" /></td> <td class="left"><input type="text" style="width: 250px;" name="config_contact_icon4" value="<?php echo $config_contact_icon4; ?>" /></td> <td class="left"><input type="text" style="width: 250px;" name="config_contact_name4" value="<?php echo $config_contact_name4; ?>" /></td> </td> </tr> <tr> <td class="right">5</a> <td class="left"><input type="text" style="width: 250px;" name="config_contact_namber5" value="<?php echo $config_contact_namber5; ?>" /></td> <td class="left"><input type="text" style="width: 250px;" name="config_contact_icon5" value="<?php echo $config_contact_icon5; ?>" /></td> <td class="left"><input type="text" style="width: 250px;" name="config_contact_name5" value="<?php echo $config_contact_name5; ?>" /></td> </td> </tr> </tbody> </table> </div>
3.0. Работаем с файлом
\catalog\controller\common\header.php
3.1. ищем:
if ($this->config->get('config_logo') && file_exists(DIR_IMAGE . $this->config->get('config_logo'))) { $this->data['logo'] = $server . $this->config->get('config_logo'); } else { $this->data['logo'] = ''; }
после вставляем:
// отступ иконки левый (margin_left) и пусть к папку с иконками (img_from) $this->data['config_contact_margin_left'] = $this->config->get('config_contact_margin_left'); $this->data['config_contact_img_from'] = $this->config->get('config_contact_img_from'); // контакт 1 $this->data['config_contact_namber1'] = $this->config->get('config_contact_namber1'); $this->data['config_contact_icon1'] = $this->config->get('config_contact_icon1'); $this->data['config_contact_name1'] = $this->config->get('config_contact_name1'); // контакт 2 $this->data['config_contact_namber2'] = $this->config->get('config_contact_namber2'); $this->data['config_contact_icon2'] = $this->config->get('config_contact_icon2'); $this->data['config_contact_name2'] = $this->config->get('config_contact_name2'); // контакт 3 $this->data['config_contact_namber3'] = $this->config->get('config_contact_namber3'); $this->data['config_contact_icon3'] = $this->config->get('config_contact_icon3'); $this->data['config_contact_name3'] = $this->config->get('config_contact_name3'); // контакт 4 $this->data['config_contact_namber4'] = $this->config->get('config_contact_namber4'); $this->data['config_contact_icon4'] = $this->config->get('config_contact_icon4'); $this->data['config_contact_name4'] = $this->config->get('config_contact_name4'); // контакт 5 $this->data['config_contact_namber5'] = $this->config->get('config_contact_namber5'); $this->data['config_contact_icon5'] = $this->config->get('config_contact_icon5'); $this->data['config_contact_name5'] = $this->config->get('config_contact_name5');
4.0. Открываем файл
\admin\language\russian\setting\setting.php
ищем:
// Entry
после вставляем:
$_['entry_contact_namber'] = 'Номер'; $_['entry_contact_icon'] = 'Иконка'; $_['entry_contact_name'] = 'Имя'; $_['entry_contact_phontime'] = 'Время работы'; $_['entry_contact_department'] = 'Отдел'; $_['entry_contact_img_from'] = 'Путь к папке с иконкой'; $_['entry_contact_margin_left'] = 'Отступ текста слева';
4.1. в этом же файле находим:
// Error
после вставляем:
$_['error_config_contact_img_from'] = '<span style="color: red">Проверьте правильность пути папки. Должен начинаться на " / " и им заканчиваться " <b>/</b> ". <b>Без пробелов</b>. Например: <b>/</b>image/contact_icon<b>/</b></span>'; $_['error_config_contact_margin_left'] = '<span style="color: red">Отступ примет значение только числового характера. Впишите <b>целое число</b> отступа!</span>';
5.0. Работаем с файлом:
\admin\language\russian\russian.php
находим
$_['tab_store'] = 'Витрина';
после вставляем:
$_['tab_contacts'] = 'Контакты';
6.0. Вставляем вывод контактов в нужное место. Файл:
\catalog\view\theme\default\template\common\header.tpl
вставьте эти данные в то место, где вы хотите их видить:
<div id="contact_bg"> <div id="contact_info_head1"> <div style="padding-left:<?php echo $config_contact_margin_left; ?>px; height: 16px; line-height: 16px; background: url('<?php echo $config_contact_img_from; ?><?php echo $config_contact_icon1; ?>') no-repeat; background-size: auto; "><?php echo $config_contact_namber1; ?> <?php echo $config_contact_name1; ?> </div> <div style="padding-left:<?php echo $config_contact_margin_left; ?>px; height: 16px; line-height: 16px; background: url('<?php echo $config_contact_img_from; ?><?php echo $config_contact_icon2; ?>') no-repeat; background-size: auto; "><?php echo $config_contact_namber2; ?> <?php echo $config_contact_name2; ?> </div> <div style="padding-left:<?php echo $config_contact_margin_left; ?>px; height: 16px; line-height: 16px; background: url('<?php echo $config_contact_img_from; ?><?php echo $config_contact_icon3; ?>') no-repeat; background-size: auto; "><?php echo $config_contact_namber3; ?> <?php echo $config_contact_name3; ?> </div> <div style="padding-left:<?php echo $config_contact_margin_left; ?>px; height: 16px; line-height: 16px; background: url('<?php echo $config_contact_img_from; ?><?php echo $config_contact_icon4; ?>') no-repeat; background-size: auto; "><?php echo $config_contact_namber4; ?> <?php echo $config_contact_name4; ?> </div> <div style="padding-left:<?php echo $config_contact_margin_left; ?>px; height: 16px; line-height: 16px; background: url('<?php echo $config_contact_img_from; ?><?php echo $config_contact_icon5; ?>') no-repeat; background-size: auto; "><?php echo $config_contact_namber5; ?> <?php echo $config_contact_name5; ?> </div> </div> </div>
На этом примере, все данные выводятся в контейнер:
<div id="contact_bg"> <div id="contact_info_head1"> ... </div></div>
стиль которых:
#header #contact_bg { position: absolute; background: url("../image/contact_header_bg.gif") center no-repeat; width: 277px; height: 100px; right: 0px; left: 300px; top: 5px; } #header #contact_info_head1 { position: absolute; width:240px; left: 10px; top: 10px; text-align:left; font-size: 12px; color: #E8E8E8; z-index: 8; }
Будет правильно написать свой стиль контейнеров.
7.0. Результат
На 1.5.5.1 работает?
ОтветитьУдалитьПредполагаю, что будет работать.
Удалитьавтор написал: "Делалось на OpenCart 1.5.4.1".
ОтветитьУдалитьДля меня полезная статья!!!
ОтветитьУдалитьАлександр вы не поможете мне в чем ошибка в уроке 3 у меня tab_contacts повторяется во всех tabs
ОтветитьУдалитьНе понял сути вопроса, где оно повторяется? что не работает? какая ошибка и где?
УдалитьАлександр с вами можно поговорить через Hangouts в google
УдалитьМожно попробовать.
УдалитьА как ?
Удалитьhyrpatсобакаgmail.ком
УдалитьКогда я делаю шаг 2.1. у меня во всех tabs выходит то что должно выходить на одной и слово витрина не меняется на Контакты
ОтветитьУдалитьПришлите файлы на Email. Только одно НО - файлы должны быть чистыми (без изменений оригинала) и версия OpenCart 1.5.4.1
УдалитьDo y write in English? & translated into Russian by an interpreter?
УдалитьЭтот комментарий был удален автором.
Удалитьlook at right column: contacts (контакты) on top.
УдалитьI sent it
УдалитьDid you get my email?
УдалитьI sent it
ОтветитьУдалитьБлин, а почему бы не создать модуль? для тех кто тяжело понимает в тегах :)
ОтветитьУдалитьМодуль - это уже продукт. который нужно интегрировать в систему.
УдалитьНа данный момент могу только автоустановщик придумать, который будет работать ТОЛЬКО на голых версиях OCart.
Что и в какой код добавить для назначения ссылки выводимым данным? Допустим, мне нужно вывести не только номера телефона, но и имэйл, имя сайта и т.п. Да и скайповый ник тоже хотелось бы сделать живым.
ОтветитьУдалитьПочему форма контактов дублируется на всех вкладках ?
ОтветитьУдалитьЧто означает "дублируется"?
Удалитьв админке дублируется. Система-Настройки-изменить.
УдалитьВкладки настроек и во всех эта форма присутствует. Ставил на чистый оренкарт 1.5.4.1 аналогично все.
Я немного все сделала по другому и у меня получилось
УдалитьИ что именно по другому, можно поинтересоваться ?
УдалитьУ вас что то не получается
УдалитьГлавное что получилось - а способов есть куча :-)
УдалитьЗдравствуйте Александр.
ОтветитьУдалитьв пунте 2.0. у вас опечатка
находим:
после вставляем:
нужно
и вопрос уже был: как поправить, форма появляется во всех вкладках настройки магазина.
P.S. Вариант хороший, подумайте над созданием модуля.
Кладу картинку в корень сайта /image/contact_icon/ ничего не происходит.
ОтветитьУдалитьДелаю на денвере может в этом проблема или проблемы в коде
Этот комментарий был удален автором.
ОтветитьУдалитьКакая у вас версия OC?
Удалить1.5.4.1
ОтветитьУдалитьОшибка в описании в пункте 2,0
ОтветитьУдалитьне tab-store добавляем(именно это дублирует вкладки на все) а tab_contacts
Спасибо за описание!
Ошибка в меню :
ОтветитьУдалитьNotice: Undefined variable: error_config_contact_img_from in Z:\home\store11.ru\www\admin\view\template\setting\setting.tpl on line 67Отступ текста слева px Notice: Undefined variable: error_config_contact_margin_left in Z:\home\store11.ru\www\admin\view\template\setting\setting.tpl on line 71
помогло, спасибо )
ОтветитьУдалитьПри входи в панель пишет((((
ОтветитьУдалить]Warning: Cannot modify header information - headers already sent by (output started at /var/www/vhosts/u0087852.plsk.regruhosting.ru/httpdocs/dust-gold.ru/admin/language/russian/russian.php:1) in /var/www/vhosts/u0087852.plsk.regruhosting.ru/httpdocs/dust-gold.ru/system/engine/controller.php on line 28Warning: Cannot modify header information - headers already sent by (output started at /var/www/vhosts/u0087852.plsk.regruhosting.ru/httpdocs/dust-gold.ru/admin/language/russian/russian.php:1) in /var/www/vhosts/u0087852.plsk.regruhosting.ru/httpdocs/dust-gold.ru/system/engine/controller.php on line 29