markosci Posted January 9, 2015 Share Posted January 9, 2015 Hola a todos! Soy nuevo en el foro y en el tema de Prestashop y necesitaría un poco de ayuda. Querría adentrarme en prestashop y poder crearle módulos y demás, pero siguiendo la documentación que hay de prestashop estoy teniendo un problema que no se cómo solucionar. Con la guía delante y siguiendola paso a paso llego hasta la parte de configuración del módulo y a mostrarlo en la columna izquierda de mi tienda demo, pero cuando intento mostrar la página al hacer click en el enlace siempre me da error 404 y no se por qué. Os pongo el código que tengo hasta ahora mymodule.php if (!defined("_PS_VERSION_")){ exit; } // Creacion clases modulo class MyModule extends Module{ // Creamos el bloque constructor que establece las propiedades public function __construct(){ $this->name = 'mymodule'; $this->tab = 'front_office_features'; $this->version = '1.0.0'; $this->author = 'Test Name'; $this->need_instance = 0; $this->ps_versions_compliancy = array('min' => '1.6', 'max' => _PS_VERSION_); $this->bootstrap = true; parent::__construct(); $this->displayName = $this->l('Test'); $this->description = $this->l('Este es un modulo de prueba'); $this->confirmUninstall = $this->l('¿Esta seguro de que quiere desinstalarlo?'); if(!Configuration::get('mymodule')){ $this->warning = $this->l('Se ha producido un error en el modulo'); } } public function install(){ if (Shop::isFeatureActive()){ Shop:setContext(Shop::CONTEXT_ALL); } return parent::install() && $this->registerHook('leftColumn') && $this->registerHook('header') && Configuration::updateValue('MYMODULE_NAME', 'my friend'); } public function uninstall(){ if ((!parent::uninstall()) || (!Configuration::deleteByName('MYMODULE_NAME'))){ return false; } return true; } public function getContent(){ $output = null; if (Tools::isSubmit('submit'.$this->name)){ $my_module_name = strval(Tools::getValue('MYMODULE_NAME')); if (!$my_module_name || empty($my_module_name) || !Validate::isGenericName($my_module_name)){ $output .= $this->displayError($this->l('Invalid Configuration value')); }else{ Configuration::updateValue('MYMODULE_NAME', $my_module_name); $output .= $this->displayConfirmation($this->l('Settings updated')); } } return $output.$this->displayForm(); } public function displayForm(){ // Get default language $default_lang = (int)Configuration::get('PS_LANG_DEFAULT'); // Init Fields form array $fields_form[0]['form'] = array( 'legend' => array( 'title' => $this->l('Settings'), ), 'input' => array( array( 'type' => 'text', 'label' => $this->l('Configuration value'), 'name' => 'MYMODULE_NAME', 'size' => 20, 'required' => true ) ), 'submit' => array( 'title' => $this->l('Save'), 'class' => 'button' ) ); $helper = new HelperForm(); // Module, token and currentIndex $helper->module = $this; $helper->name_controller = $this->name; $helper->token = Tools::getAdminTokenLite('AdminModules'); $helper->currentIndex = AdminController::$currentIndex.'&configure='.$this->name; // Language $helper->default_form_language = $default_lang; $helper->allow_employee_form_lang = $default_lang; // Title and toolbar $helper->title = $this->displayName; $helper->show_toolbar = true; // false -> remove toolbar $helper->toolbar_scroll = true; // yes - > Toolbar is always visible on the top of the screen. $helper->submit_action = 'submit'.$this->name; $helper->toolbar_btn = array( 'save' => array( 'desc' => $this->l('Save'), 'href' => AdminController::$currentIndex.'&configure='.$this->name.'&save'.$this->name. '&token='.Tools::getAdminTokenLite('AdminModules'), ), 'back' => array( 'href' => AdminController::$currentIndex.'&token='.Tools::getAdminTokenLite('AdminModules'), 'desc' => $this->l('Back to list') ) ); // Load current value $helper->fields_value['MYMODULE_NAME'] = Configuration::get('MYMODULE_NAME'); return $helper->generateForm($fields_form); } public function hookDisplayLeftColumn($params){ $this->context->smarty->assign( array( 'my_module_name' => Configuration::get('MYMODULE_NAME'), 'my_module_link' => $this->context->link->getModuleLink('mymodule', 'display') ) ); return $this->display(__FILE__, 'mymodule.tpl'); } public function hookDisplayRightColumn($params){ return $this->hookDisplayLeftColumn($params); } public function hookDisplayHeader(){ $this->context->controller->addCSS($this->_path.'css/mymodule.css', 'all'); } } mymodule.tpl <!-- Block mymodule --> <div id="mymodule_block_home" class="block"> <h4>Welcome!</h4> <div class="block_content"> <p>Hello, {if isset($my_module_name) && $my_module_name} {$my_module_name} {else} World {/if} ! </p> <ul> <li><a href="{$my_module_link}" title="Click this link">Click me!</a></li> </ul> </div> </div> <!-- /Block mymodule --> display.php [puesto en la raíz de mi modulo] class mymoduledisplayModuleFrontController extends ModuleFrontController { public function initContent() { parent::initContent(); $this->setTemplate('display.tpl'); } } display.tpl [puesto también en la raíz] Bienvenido! Pero lo dicho...siempre que pulso sobre el enlace me da como resultado error 404, no se encuentra la página (con el icono de prestashop y demás...). La caché de prestashop la tengo deshabilitada y más que borrada pero nada. ¿Qué es lo que estoy haciendo mal? Gracias por la ayuda! Link to comment Share on other sites More sharing options...
orlangrod Posted January 10, 2015 Share Posted January 10, 2015 ¿Tu display.php no deberia estar ubicado en "/modules/mymodule/controllers/front"? Lo mismo con el display.tpl, creo deberia estar ubicado en "/modules/mymodule/views/templates/front" 1 Link to comment Share on other sites More sharing options...
ventura Posted January 10, 2015 Share Posted January 10, 2015 La estructura debe de ser la que te indica el usuario orlangrod Para el archivo display.php esta ruta /modules/mymodule/controllers/front/display.php En el my.module.php principal tendras que indicar el controlador en public function __construct() Lo puedes hacer asi $this->controllers = 'display'; Dentro de la ruta /modules/mymodule/controllers/front/ Debes de incluir tambien un index.php con el contenido header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); header("Location: ../"); exit; 1 Link to comment Share on other sites More sharing options...
markosci Posted January 12, 2015 Author Share Posted January 12, 2015 ¿Tu display.php no deberia estar ubicado en "/modules/mymodule/controllers/front"? Lo mismo con el display.tpl, creo deberia estar ubicado en "/modules/mymodule/views/templates/front" Gracias! Leyendo la documentación no me dí cuenta de que cuando menciona los ficheros display.tpl te dice en una frase justo debajo que lo situes en la ruta que comentas La estructura debe de ser la que te indica el usuario orlangrod Para el archivo display.php esta ruta /modules/mymodule/controllers/front/display.php En el my.module.php principal tendras que indicar el controlador en public function __construct() Lo puedes hacer asi $this->controllers = 'display'; Dentro de la ruta /modules/mymodule/controllers/front/ Debes de incluir tambien un index.php con el contenido header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); header("Location: ../"); exit; Sí ya he cambiado la ruta y me lo muestra ¡¡Gracias por la ayuda!! Otra cosa...¿porqué ese index? No he encontrado nada en la documentación que diga sobre crear ese index si me lo puedes explicar te lo agradezco Link to comment Share on other sites More sharing options...
ventura Posted January 12, 2015 Share Posted January 12, 2015 Otra cosa...¿porqué ese index? No he encontrado nada en la documentación que diga sobre crear ese index si me lo puedes explicar te lo agradezco Es más que nada para que el navegador no guarde el contenido en su cache y se acceda siempre al contenido actualizado Link to comment Share on other sites More sharing options...
markosci Posted January 12, 2015 Author Share Posted January 12, 2015 Es más que nada para que el navegador no guarde el contenido en su cache y se acceda siempre al contenido actualizado Ah ok gracias! Tengo una pregunta...pero no sé si sería cosa de abrir una nueva entrada o en esta misma serviría. ¿Hay alguna función para poder obtener la referencia del pedido? Es que estoy intentando hacer un módulo para hacer un TPV pero quiero ir construyendolo poco a poco y aún hay muchas funciones y formas de hacer el código que no entiendo jejeje Link to comment Share on other sites More sharing options...
Recommended Posts