MT Studio Posted April 21, 2021 Share Posted April 21, 2021 Bonjour, Je suis entrain de travailler sur un site en pré-production sous 1.7.6. Sur cette pré-prod, le multi-boutique est activé : il y a 3 boutiques. Je travaille sur une seule qui a son propre thème (les deux autres ont le thème par défaut). Lorsque je veux une modification sur un module du thème et que je souhaite sauvegarder ma modif., j'ai un message d'erreur. J'ai l'impression que l'iD du shop ne se sélectionne pas. Bien entendu, j'ai vidé le cache, j'ai bien vérifié que la boutique sur laquel je souhiate faire la modif. est bien sélectionné. Link to comment Share on other sites More sharing options...
Alexandre Carette Posted April 21, 2021 Share Posted April 21, 2021 Salut, peut-on avoir le code du fichier tm_navcmsblock.php du module tm_navcmsblock ? cdt Link to comment Share on other sites More sharing options...
MT Studio Posted April 22, 2021 Author Share Posted April 22, 2021 (edited) 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. Edited April 23, 2021 by MT Studio (see edit history) Link to comment Share on other sites More sharing options...
MT Studio Posted April 23, 2021 Author Share Posted April 23, 2021 Bonjour, Oui biensur, voici le code. code.html Link to comment Share on other sites More sharing options...
Alexandre Carette Posted April 23, 2021 Share Posted April 23, 2021 (edited) Salut, Si tu veux de l'aide ce serait bien d'avoir le tm_navcmsblock.php complet sans modif... néanmoins on peut faire un $shop_ids = Shop::getShops(); var_dump($shop_ids); die(); vers ligne 117 pour voir s'il trouve des shops cdt Edited April 23, 2021 by Alexandre Carette (see edit history) Link to comment Share on other sites More sharing options...
MT Studio Posted April 23, 2021 Author Share Posted April 23, 2021 Voici le fichier complet. tm_navcmsblock.php Link to comment Share on other sites More sharing options...
Alexandre Carette Posted April 23, 2021 Share Posted April 23, 2021 ca retourne quoi le var_dump ? Link to comment Share on other sites More sharing options...
MT Studio Posted April 23, 2021 Author Share Posted April 23, 2021 Les 3 boutiques sont visibles. C'est bien la boutique 2 qui a été sélectionné pour faire la modif. array(3) { [3]=> array(9) { ["id_shop"]=> string(1) "3" ["id_shop_group"]=> string(1) "1" ["name"]=> string(15) "Boutique1" ["id_category"]=> string(1) "2" ["theme_name"]=> string(7) "classic" ["domain"]=> string(17) "boutique1.com" ["domain_ssl"]=> string(17) "boutique1.com" ["uri"]=> string(1) "/" ["active"]=> string(1) "1" } [1]=> array(9) { ["id_shop"]=> string(1) "1" ["id_shop_group"]=> string(1) "1" ["name"]=> string(12) "Boutique2" ["id_category"]=> string(1) "2" ["theme_name"]=> string(10) "PRSADD0106" ["domain"]=> string(24) "boutique2.fr" ["domain_ssl"]=> string(24) "boutique2.fr" ["uri"]=> string(1) "/" ["active"]=> string(1) "1" } [2]=> array(9) { ["id_shop"]=> string(1) "2" ["id_shop_group"]=> string(1) "1" ["name"]=> string(16) "Boutique3" ["id_category"]=> string(1) "2" ["theme_name"]=> string(7) "classic" ["domain"]=> string(17) "boutique3.fr" ["domain_ssl"]=> string(17) "boutique3.fr" ["uri"]=> string(1) "/" ["active"]=> string(1) "1" } } Link to comment Share on other sites More sharing options...
Alexandre Carette Posted April 23, 2021 Share Posted April 23, 2021 (edited) il retourne id_shop en string, a 1er vue teste un typage en INT comme ceci (vire le var_dump die) Edited April 23, 2021 by Alexandre Carette (see edit history) Link to comment Share on other sites More sharing options...
MT Studio Posted April 23, 2021 Author Share Posted April 23, 2021 Ok, je n'ai plus d'erreurs lorsque je valide la modification. Mais invisible sur le front de la boutique2. Link to comment Share on other sites More sharing options...
Alexandre Carette Posted April 23, 2021 Share Posted April 23, 2021 (edited) verifie la donnée en BDD (via phpmyadmin )sur les tables ps_tmnavcmsblockinfo_lang et ps_tmnavcmsblockinfo et ce que ton block est bien enregistré ? es tu sur la bonne langue Edited April 23, 2021 by Alexandre Carette (see edit history) Link to comment Share on other sites More sharing options...
MT Studio Posted April 23, 2021 Author Share Posted April 23, 2021 (edited) Rectification : visible dans ps_tmnavcmsblockinfo_lang mais pas dans ps_tmnavcmsblockinfo ! Edited April 23, 2021 by MT Studio (see edit history) Link to comment Share on other sites More sharing options...
Alexandre Carette Posted April 23, 2021 Share Posted April 23, 2021 et sur l autre table aussi avec le bon id_shop ? Link to comment Share on other sites More sharing options...
MT Studio Posted April 23, 2021 Author Share Posted April 23, 2021 2 minutes ago, MT Studio said: Rectification : visible dans ps_tmnavcmsblockinfo_lang mais pas dans ps_tmnavcmsblockinfo ! Link to comment Share on other sites More sharing options...
Alexandre Carette Posted April 23, 2021 Share Posted April 23, 2021 peux tu mettre le code de NavCmsBlock.php faut look la fonction add() et save() Link to comment Share on other sites More sharing options...
MT Studio Posted April 23, 2021 Author Share Posted April 23, 2021 NavCmsBlock.php Link to comment Share on other sites More sharing options...
Alexandre Carette Posted April 23, 2021 Share Posted April 23, 2021 Je sais pas ce que le dev a fumé en faisant ce module... Link to comment Share on other sites More sharing options...
Alexandre Carette Posted April 23, 2021 Share Posted April 23, 2021 essaye ca, <?php /** * 2007-2016 PrestaShop * * NOTICE OF LICENSE * * This source file is subject to the Academic Free License (AFL 3.0) * that is bundled with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://opensource.org/licenses/afl-3.0.php * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to [email protected] so we can send you a copy immediately. * * DISCLAIMER * * Do not edit or add to this file if you wish to upgrade PrestaShop to newer * versions in the future. If you wish to customize PrestaShop for your * needs please refer to http://www.prestashop.com for more information. * * @author PrestaShop SA <[email protected]> * @copyright 2007-2016 PrestaShop SA * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) * International Registred Trademark & Property of PrestaShop SA */ class NavCmsBlock extends ObjectModel { public $id_tmnavcmsblockinfo; public $id_shop; public $text; /** * @see ObjectModel::$definition */ public static $definition = array( 'table' => 'tmnavcmsblockinfo', 'primary' => 'id_tmnavcmsblockinfo', 'multilang' => true, 'multilang_shop' => true, 'fields' => array( 'id_tmnavcmsblockinfo' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId'), 'id_shop' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId'), // Lang fields 'id_lang' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId'), 'text' => array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml', 'required' => true), ) ); } Link to comment Share on other sites More sharing options...
MT Studio Posted April 23, 2021 Author Share Posted April 23, 2021 Erreur lors de la sauvegarde Link to comment Share on other sites More sharing options...
Alexandre Carette Posted April 23, 2021 Share Posted April 23, 2021 en BDD tu as bien la colonne ID. shop ? peux tu screen la structure de la table ps_tmnavcmsblockinfo Link to comment Share on other sites More sharing options...
MT Studio Posted April 23, 2021 Author Share Posted April 23, 2021 Oui la colonne is_shop est bien là. Link to comment Share on other sites More sharing options...
Alexandre Carette Posted April 23, 2021 Share Posted April 23, 2021 ok rajoute une colonne id_shop dans tmnavcmsblockinfo_lang de type INT Link to comment Share on other sites More sharing options...
Mediacom87 Posted April 23, 2021 Share Posted April 23, 2021 il y a 4 minutes, Alexandre Carette a dit : en BDD tu as bien la colonne ID. shop ? peux tu screen la structure de la table ps_tmnavcmsblockinfo cela semble plus sur la table ps_tmnavcmsblockinfo_lang 1 Link to comment Share on other sites More sharing options...
Alexandre Carette Posted April 23, 2021 Share Posted April 23, 2021 et du coup on modifie aussi l install Link to comment Share on other sites More sharing options...
Mediacom87 Posted April 23, 2021 Share Posted April 23, 2021 Et sinon le support du template qui a gagné de l'argent en vendant un template avec des modules développés avec les pieds on en parle ? Link to comment Share on other sites More sharing options...
MT Studio Posted April 23, 2021 Author Share Posted April 23, 2021 Colonne "id_shop" insérée sur la table ps_tmnavcmsblockinfo_lang. Ajout de la ligne `id_shop` sur tm_navcmsblock.php. Sauvegarde après modifications. Erreur. Link to comment Share on other sites More sharing options...
Alexandre Carette Posted April 23, 2021 Share Posted April 23, 2021 (edited) creer une table ps_tmnavcmsblockinfo_shop fait une requette via php my admin (onglet SQL) CREATE TABLE ps_tmnavcmsblockinfo_shop` ( `id_tmnavcmsblockinfo` INT UNSIGNED NOT NULL, `id_shop` int(10) unsigned NOT NULL , PRIMARY KEY (`id_tmnavcmsblockinfo`, `id_shop`)); et on modifie l'install 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 , `id_shop` int(10) unsigned NOT NULL , `text` text NOT NULL, PRIMARY KEY (`id_tmnavcmsblockinfo`, `id_lang`) ) ENGINE='._MYSQL_ENGINE_.' DEFAULT CHARSET=utf8 ;' ); $return &= Db::getInstance()->execute(' CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'tmnavcmsblockinfo_shop` ( `id_tmnavcmsblockinfo` INT UNSIGNED NOT NULL, `id_shop` int(10) unsigned NOT NULL , PRIMARY KEY (`id_tmnavcmsblockinfo`, `id_shop`) ) ENGINE='._MYSQL_ENGINE_.' DEFAULT CHARSET=utf8 ;' ); return $return; } Edited April 23, 2021 by Alexandre Carette (see edit history) Link to comment Share on other sites More sharing options...
MT Studio Posted April 27, 2021 Author Share Posted April 27, 2021 (edited) Hello, Après avoir échangé avec le développeur du thème, il s'avère qu'il y a une incompatibilité des modules avec le multi-boutique... Je ne vais pas chercher plus loin, je désactive le mode multiboutique de la pré-prod. Merci en tout cas Alexandre pour ton aide ! Edited April 27, 2021 by MT Studio (see edit history) Link to comment Share on other sites More sharing options...
Mediacom87 Posted April 27, 2021 Share Posted April 27, 2021 il y a 50 minutes, MT Studio a dit : Après avoir échangé avec le développeur du thème, il s'avère qu'il y a une incompatibilité des modules avec le multi-boutique... Donc leur template n'est pas compatible avec Prestas£hop, car le multi boutique est une fonctionnalité de base de PrestaShop. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now