if (!defined('_PS_VERSION_')) { exit; } use PrestaShop\PrestaShop\Core\Module\WidgetInterface; require_once _PS_MODULE_DIR_.'tm_navcmsblock/classes/NavCmsBlock.php'; class Tm_Navcmsblock extends Module implements WidgetInterface { private $templateFile; public function __construct() { $this->name = 'tm_navcmsblock'; $this->tab = 'front_office_features'; $this->author = 'TemplateMela'; $this->version = '1.0.0'; $this->need_instance = 0; $this->bootstrap = true; parent::__construct(); $this->displayName = $this->trans('TM - Nav CMS Block', array(), 'Modules.NavCmsBlock'); $this->description = $this->trans('Adds custom information block in your store.', array(), 'Modules.NavCmsBlock'); $this->ps_versions_compliancy = array('min' => '1.7.0.0', 'max' => _PS_VERSION_); $this->templateFile = 'module:tm_navcmsblock/views/templates/hook/tm_navcmsblock.tpl'; } public function install() { $this->_clearCache('*'); return parent::install() && $this->installDB() && $this->registerHook('displayTmnavcmsblock'); } public function uninstall() { return parent::uninstall() && $this->uninstallDB(); } public function installDB() { $return = true; $return &= Db::getInstance()->execute(' CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'tmnavcmsblockinfo` ( `id_tmnavcmsblockinfo` INT UNSIGNED NOT NULL AUTO_INCREMENT, `id_shop` int(10) unsigned DEFAULT NULL, PRIMARY KEY (`id_tmnavcmsblockinfo`) ) ENGINE='._MYSQL_ENGINE_.' DEFAULT CHARSET=utf8 ;' ); $return &= Db::getInstance()->execute(' CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'tmnavcmsblockinfo_lang` ( `id_tmnavcmsblockinfo` INT UNSIGNED NOT NULL, `id_lang` int(10) unsigned NOT NULL , `text` text NOT NULL, PRIMARY KEY (`id_tmnavcmsblockinfo`, `id_lang`) ) ENGINE='._MYSQL_ENGINE_.' DEFAULT CHARSET=utf8 ;' ); return $return; } public function uninstallDB($drop_table = true) { $ret = true; if ($drop_table) { $ret &= Db::getInstance()->execute('DROP TABLE IF EXISTS `'._DB_PREFIX_.'tmnavcmsblockinfo`') && Db::getInstance()->execute('DROP TABLE IF EXISTS `'._DB_PREFIX_.'tmnavcmsblockinfo_lang`'); } return $ret; } public function getContent() { $output = ''; if (Tools::isSubmit('savetm_navcmsblock')) { if (!Tools::getValue('text_'.(int)Configuration::get('PS_LANG_DEFAULT'), false)) { $output = $this->displayError($this->trans('Please fill out all fields.', array(), 'Admin.Notifications.Error')) . $this->renderForm(); } else { $update = $this->processSaveNavCmsblock(); if (!$update) { $output = '<div class="alert alert-danger conf error">' .$this->trans('An error occurred on saving.', array(), 'Admin.Notifications.Error') .'</div>'; } $this->_clearCache($this->templateFile); } } return $output.$this->renderForm(); } public function processSaveNavCmsblock() { $tmnavcmsblockinfo = new NavCmsBlock(Tools::getValue('id_tmnavcmsblockinfo', 1)); $text = array(); $languages = Language::getLanguages(false); foreach ($languages as $lang) { $text[$lang['id_lang']] = Tools::getValue('text_'.$lang['id_lang']); } $tmnavcmsblockinfo->text = $text; if (Shop::isFeatureActive() && !$tmnavcmsblockinfo->id_shop) { $saved = true; $shop_ids = Shop::getShops(); foreach ($shop_ids as $id_shop) { $tmnavcmsblockinfo->id_shop = $id_shop; $saved &= $tmnavcmsblockinfo->add(); } } else { $tmnavcmsblockinfo->id_shop = Shop::getContextShopID(); $saved = $tmnavcmsblockinfo->save(); } return $saved; } protected function renderForm() { $default_lang = (int)Configuration::get('PS_LANG_DEFAULT'); $fields_form = array( 'tinymce' => true, 'legend' => array( 'title' => $this->trans('CMS block', array(), 'Modules.CustomText'), ), 'input' => array( 'id_tmnavcmsblockinfo' => array( 'type' => 'hidden', 'name' => 'id_tmnavcmsblockinfo' ), 'content' => array( 'type' => 'textarea', 'label' => $this->trans('Text block', array(), 'Modules.CustomText'), 'lang' => true, 'name' => 'text', 'cols' => 40, 'rows' => 10, 'class' => 'rte', 'autoload_rte' => true, ), ), 'submit' => array( 'title' => $this->trans('Save', array(), 'Admin.Actions'), ), 'buttons' => array( array( 'href' => AdminController::$currentIndex.'&configure='.$this->name.'&token='.Tools::getAdminTokenLite('AdminModules'), 'title' => $this->trans('Back to list', array(), 'Admin.Actions'), 'icon' => 'process-icon-back' ) ) ); if (Shop::isFeatureActive() && Tools::getValue('id_tmnavcmsblockinfo') == false) { $fields_form['input'][] = array( 'type' => 'shop', 'label' => $this->trans('Shop association', array(), 'Admin.Global'), 'name' => 'checkBoxShopAsso_theme' ); } $helper = new HelperForm(); $helper->module = $this; $helper->name_controller = 'tm_navcmsblock'; $helper->identifier = $this->identifier; $helper->token = Tools::getAdminTokenLite('AdminModules'); foreach (Language::getLanguages(false) as $lang) { $helper->languages[] = array( 'id_lang' => $lang['id_lang'], 'iso_code' => $lang['iso_code'], 'name' => $lang['name'], 'is_default' => ($default_lang == $lang['id_lang'] ? 1 : 0) ); } $helper->currentIndex = AdminController::$currentIndex.'&configure='.$this->name; $helper->default_form_language = $default_lang; $helper->allow_employee_form_lang = $default_lang; $helper->toolbar_scroll = true; $helper->title = $this->displayName; $helper->submit_action = 'savetm_navcmsblock'; $helper->fields_value = $this->getFormValues(); return $helper->generateForm(array(array('form' => $fields_form))); } public function getFormValues() { $fields_value = array(); $id_tmnavcmsblockinfo = 1; foreach (Language::getLanguages(false) as $lang) { $tmnavcmsblockinfo = new NavCmsBlock((int)$id_tmnavcmsblockinfo); $fields_value['text'][(int)$lang['id_lang']] = $tmnavcmsblockinfo->text[(int)$lang['id_lang']]; } $fields_value['id_tmnavcmsblockinfo'] = $id_tmnavcmsblockinfo; return $fields_value; } public function renderWidget($hookName = null, array $configuration = []) { if (!$this->isCached($this->templateFile, $this->getCacheId('tm_navcmsblock'))) { $this->smarty->assign($this->getWidgetVariables($hookName, $configuration)); } return $this->fetch($this->templateFile, $this->getCacheId('tm_navcmsblock')); } public function getWidgetVariables($hookName = null, array $configuration = []) { $sql = 'SELECT r.`id_tmnavcmsblockinfo`, r.`id_shop`, rl.`text` FROM `'._DB_PREFIX_.'tmnavcmsblockinfo` r LEFT JOIN `'._DB_PREFIX_.'tmnavcmsblockinfo_lang` rl ON (r.`id_tmnavcmsblockinfo` = rl.`id_tmnavcmsblockinfo`) WHERE `id_lang` = '.(int)$this->context->language->id.' AND `id_shop` = '.(int)$this->context->shop->id; return array( 'tmnavcmsblockinfos' => Db::getInstance()->getRow($sql), ); } }
Oui biensur, voici le code.