cryoth Posted August 24, 2021 Share Posted August 24, 2021 Bonjour à tous, J'ai développé un module maison qui contient une page AdminController et qui fonctionne très bien sur mon poste en local, cependant lorsque j'installe le module sur un serveur Linux en préprod, dans la page AdminController, le site me renvoi une erreur "page not found". La vue n'est pas chargée (ni même partiellement) et l'url semble pourtant correcte. //Le code permettant d'accéder à la page via une "tab" dans le menu du BO public function install() { include(dirname(__FILE__).'/sql/install.php'); $this->loadLegacyForms(); return parent::install() && $this->_installTab() && $this->registerHook('header') && $this->registerHook('backOfficeHeader') && $this->registerHook('ActionFrontControllerSetVariables') && $this->registerHook('displayHeader'); } /** * Installation du controller dans la backoffice * @return boolean */ protected function _installTab() { $tab = new Tab(); $tab->class_name = 'AdminCfm'; $tab->module = $this->name; $tab->id_parent = (int)Tab::getIdFromClassName('IMPROVE'); $tab->icon = 'tune'; $languages = Language::getLanguages(); foreach ($languages as $lang) { $tab->name[$lang['id_lang']] = $this->l('Custom Fields Manager'); } try { $tab->save(); } catch (Exception $e) { echo $e->getMessage(); return false; } return true; } Et le code de ma class qui étends AdminController <?php if (!class_exists('ModelCFM')) { require_once _PS_MODULE_DIR_.'CustomFieldsManager/classes/ModelCFM.php'; } class AdminCfmController extends ModuleAdminController { /** * Instanciation de la classe * Définition des paramètres basiques obligatoires */ public function __construct() { $this->bootstrap = true; //Gestion de l'affichage en mode bootstrap $this->table = ModelCFM::$definition['table']; //Table de l'objet $this->identifier = ModelCFM::$definition['primary']; //Clé primaire de l'objet $this->className = ModelCFM::class; //Classe de l'objet $this->lang = false; //Flag pour dire si utilisation de langues ou non //Appel de la fonction parente pour pouvoir utiliser la traduction ensuite parent::__construct(); //Liste des champs de l'objet à afficher dans la liste $this->fields_list = [ 'id_CustomFieldsManager' => [ //nom du champ sql 'title' => $this->module->l('ID'), 'align' => 'center', ], 'form_name' => [ 'title' => $this->module->l('Nom du formulaire'), 'align' => 'left', ], 'position' => [ 'title' => $this->module->l('Position'), 'align' => 'left', ], 'range' => [ 'title' => $this->module->l('Champs d\'action'), 'align' => 'left', ], 'date_add' => [ 'title' => $this->module->l('Date d\'ajout'), 'align' => 'center', ], ]; //Ajout d'action sur chaque ligne $this->addRowAction('edit'); $this->addRowAction('delete'); } /** * Assign smarty variables for all default views, list and form, then call other init functions. */ public function initContent(){ $link = new Link(); $urladmin = $link->getAdminLink( 'AdminCfm' ); // Condition pour n'afficher que sur page ajout/edit if ($this->display == 'edit' || $this->display == 'add') { // Récupération de l'objet si existe $obj = $this->loadObject(true); $inputs = unserialize($obj->inputs); // Contenu ultra basique du formulaire pour permettre l'affichage d'un champs par defaut if(empty($inputs)){ $inputs = array(array( 'type' => '', 'title' => '', 'name' => '', 'value' => '', )); } $this->context->smarty->assign(array( 'form_id' => (int) Tools::getValue($this->identifier), 'token' => $this->token, 'form_name' => $obj->form_name, 'inputs' => $inputs )); // Ajout du template du custom form pour affichage $this->content .= $this->context->smarty->fetch(_PS_MODULE_DIR_.'CustomFieldsManager/views/templates/admin/form.tpl'); // Retourne le contenu du formulaire dans smarty $this->context->smarty->assign( array( 'content' => $this->content ) ); }else{ parent::initContent(); } } /** * @TODO uses redirectAdmin only if !$this->ajax * * @return ObjectModel|bool */ public function postProcess(){ if (((bool)Tools::isSubmit('submitAddcustomfieldsmanager')) == true) { $input = array(); if($_POST["customFieldID"]){ $CFM = new ModelCFM((int) $_POST["customFieldID"]); }else{ $CFM = new ModelCFM(); } $CFM->form_name = $_POST["cfmname_form"]; $CFM->form_name = $_POST["cfmname_form"]; unset($_POST["cfmname_form"]); unset($_POST["submitAddcustomfieldsmanager"]); unset($_POST["customFieldID"]); foreach ($_POST as $key => $value) { $type = substr($key, strrpos($key, '|') + 1); $paths = explode("_", substr($key, 0, strrpos($key, '|'))); $input = $this->addBranch($input, $paths, $type, $value, substr($key, 0, strrpos($key, '|'))); } $CFM->inputs = serialize($input); $CFM->position = 0; $CFM->range = "global"; $CFM->date_add = date("Y-m-d"); if($CFM->id_CustomFieldsManager){ $CFM->update(); }else{ $CFM->add(); } }else{ parent::postProcess(); } } /** * Création de l'arborescence de l'input à un niveau multidimensionnel * * @param array $tree * @param array $paths * @param string $type * @param string $value * @return array */ public function addBranch($tree, $paths, $type, $value, $position){ if(count($paths) > 1){ if($tree[$paths[0]]["type"] == "repeater"){ if(!isset($tree[$paths[0]]["value"][0][0]["value"])){ array_push($tree[$paths[0]]["value"], $this->addBranch($tree[$paths[0]]["value"], $this->removeFirstArray($paths), $type, $value, $position)); }else{ $tree[$paths[0]]["value"][0] = $this->addBranch($tree[$paths[0]]["value"][0], $this->removeFirstArray($paths), $type, $value, $position); } }else{ $tree[$paths[0]]["value"] = $this->addBranch($tree[$paths[0]]["value"], $this->removeFirstArray($paths), $type, $value, $position); } }else{ // Crée le champs si n'existe pas encore (évite également les écrasements via vérif de la présence de "title") if(!isset($tree[$paths[0]]["title"])){ $tree[$paths[0]] = array( 'type' => '', 'title' => '', 'name' => '', 'count' => 1, 'value' => array(), ); } if($type == "name"){ $tree[$paths[0]]["title"] = $value; $tree[$paths[0]]["name"] = str_replace(" ", "_", strtolower($value.$position)); }elseif($type == "type"){ $tree[$paths[0]]["type"] = $value; if($tree[$paths[0]]["type"] == "repeater"){ if(!is_array($tree[$paths[0]]["value"])){ $tree[$paths[0]]["value"] = array(); } } } } return $tree; } /** * Renvoi un tableau avec le 1er element retiré * * @param array $array * @return void */ private function removeFirstArray($array){ array_shift($array); return $array; } /** * Gestion de la toolbar */ public function initPageHeaderToolbar() { //Ajout d'un bouton pour aller sur la page de configuration $this->page_header_toolbar_btn['config_button'] = array( 'href' => $this->context->link->getAdminLink('AdminModules') . '&configure=' . Tools::safeOutput($this->module->name), 'desc' => $this->module->l('Gestion des contenus'), 'icon' => 'process-icon-configure' ); //Bouton d'ajout $this->page_header_toolbar_btn['new'] = array( 'href' => self::$currentIndex . '&add' . $this->table . '&token=' . $this->token, 'desc' => $this->module->l('Ajout d\'un nouveau Formulaire'), 'icon' => 'process-icon-new' ); parent::initPageHeaderToolbar(); } /** * Fonction ajax basique * * @return void */ public function ajaxProcessLoadField() { echo "HELLO WORLD !"; exit; // Nécessaire pour éviter le contenu inutile en fin de script } } J'ai déjà vérifié si il y avait conflit avec un module mais rien ne change lorsque je désactive tous les modules du BO. Je suis à court d'idées, toute aide est la bienvenue ^^ Link to comment Share on other sites More sharing options...
Alexandre Carette Posted August 24, 2021 Share Posted August 24, 2021 Salut, renomme ton fichier en AdminCfmController.php `cdt Link to comment Share on other sites More sharing options...
doekia Posted August 24, 2021 Share Posted August 24, 2021 Et/ou l'installation du "tab" n'a pas aboutie 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