В своих работах часто возникает необходимость сделает для клиент возможность редактировать телефон и прочие контактные данные в макете. Сейчас мы рассмотрим наиболее простые варианты реализации.
Для версии 1.4
В Админ панели у нас есть возможность указать стандартные контактные данные, все они хранятся в таблице с настройками. Редактируются они в Настройках -> Контакты
У каждого поля есть своё название настройки, посмотреть это можно в исходном коде страницы атрибут name у input, называются они PS_SHOP_*. Это название нам необходимо для обращения к нему, через php. Если же мы хотим добавить новые поля, то это делается достаточно просто в файле /admin/tabs/AdminContact.php. Открываем файлы и видим
$formFields = array( 'PS_SHOP_NAME' => array('title' => $this->l('Shop name:'), 'desc' => $this->l('Displayed in e-mails and page titles'), 'validation' => 'isGenericName', 'required' => true, 'size' => 30, 'type' => 'text'), 'PS_SHOP_EMAIL' => array('title' => $this->l('Shop e-mail:'), 'desc' => $this->l('Displayed in e-mails sent to customers'), 'validation' => 'isEmail', 'required' => true, 'size' => 30, 'type' => 'text'), 'PS_SHOP_DETAILS' => array('title' => $this->l('Registration:'), 'desc' => $this->l('Shop registration information (e.g., SIRET or RCS)'), 'validation' => 'isGenericName', 'size' => 30, 'type' => 'textarea', 'cols' => 30, 'rows' => 5), 'PS_SHOP_ADDR1' => array('title' => $this->l('Shop address line 1:'), 'validation' => 'isAddress', 'size' => 30, 'type' => 'text'), 'PS_SHOP_ADDR2' => array('title' => $this->l('Address line 2'), 'validation' => 'isAddress', 'size' => 30, 'type' => 'text'), 'PS_SHOP_CODE' => array('title' => $this->l('Post/Zip code:'), 'validation' => 'isGenericName', 'size' => 6, 'type' => 'text'), 'PS_SHOP_CITY' => array('title' => $this->l('City:'), 'validation' => 'isGenericName', 'size' => 30, 'type' => 'text'), 'PS_SHOP_COUNTRY_ID' => array('title' => $this->l('Country:'), 'validation' => 'isInt', 'size' => 30, 'type' => 'select', 'list' => $countryList, 'identifier' => 'id', 'cast' => 'intval'), 'PS_SHOP_STATE_ID' => array('title' => $this->l('State:'), 'validation' => 'isInt', 'size' => 30, 'type' => 'select', 'list' => $stateList, 'identifier' => 'id', 'cast' => 'intval'), 'PS_SHOP_PHONE' => array('title' => $this->l('Phone:'), 'validation' => 'isGenericName', 'size' => 30, 'type' => 'text'), 'PS_SHOP_FAX' => array('title' => $this->l('Fax:'), 'validation' => 'isGenericName', 'size' => 30, 'type' => 'text'), ); |
Как мы видим в этом списке перечислены все поля на странице Настройки — Контакты, если мы хотим добавить новое, нам необходимо добавить еще одну строку, подобную тем, что перечислены. Допустим хотим добавить второй телефон.
'PS_SHOP_PHONE2' => array('title' => $this->l('Второй телефон:'), 'validation' => 'isGenericName', 'size' => 30, 'type' => 'text'), |
Сохраняем файл и проверяем, если все сделали правильно, то у нас появится еще одно поле и что не мало важно, оно будет сохранять введёное значение.
Теперь настроим вывод переменных в шаблон. В данном примере я рассматриваю необходимость выводить во все возможных файлы шаблона, если вам необходимо для модуля имеет смысл делать это в исполняющем файле модуля. Пример рассматривается для ветки 1.4.x, в других версиях файлы другие. Открываем /classes/FrontController.php
и ищем конец функции displayHeader(), у меня это 517 строка
self::$smarty->display(_PS_THEME_DIR_.'header.tpl'); |
Перед этой строкой вставляем
self::$smarty->assign('phone2', Configuration::get('PS_SHOP_PHONE2')); |
Сохраняем, теперь мы можем вывести значение поля {$phone2}
Для версии 1.5
В целом суть отражена в верхней части статьи, есть только несколько изменений:
1. Настройки хранятся теперь в Админ панели — Настройки — Контакты магазина, путь к файлу изменился на /controllers/admin/AdminStoresController.php
2. Новый параметр мы можем вставить примерно на 480 строке:
'PS_SHOP_PHONE' => array( 'title' => $this->l('Phone'), 'validation' => 'isGenericName', 'size' => 30, 'type' => 'text' ), |
В таком же формате, после этого поля.
3. Путь до главного контроллера тоже изменился /classes/controller/FrontController.php
В остальном всё так же.