Cada vez que modificar un archivo hay que compilarlo, para ello abre el panel de control y en:
Preferencias>rendimiento
Forzar compilación y de paso pon que no se almacene caché.
Vamos al grano:
CREAR UN NUEVO HOOK
1. Crear una nueva entrada en la base de datos en la tabla ps_hookINSERT INTO `ps_hook` (`name`, `title`, `description`) VALUES ('Hooknuevo', 'Nombre que se mostrará al usuario', 'Descripcion del hook para mostrar al usuario');
2. Modificar el archivo /classes/FrontController.php
Verás un código como este:
self::$smarty->assign(array(
'HOOK_HEADER' => Module::hookExec('header'),
'HOOK_TOP' => Module::hookExec('top'),
'HOOK_LEFT_COLUMN' => Module::hookExec('leftColumn')
Insertar nuestro nuevo hook con la nomenclatura correspondiente:
self::$smarty->assign(array(
'HOOK_HEADER' => Module::hookExec('header'),
'HOOK_TOP' => Module::hookExec('top'),
'HOOK_LEFT_COLUMN' => Module::hookExec('leftColumn')
'HOOK_MIONUEVO' => Module::hookExec('Hooknuevo')
Con esto indicamos como vamos a llamar desde los templates a nuestro nuevo hook que contendrá un módulo.
Por ejemplo en el archivo header.php como eras {$HOOK_TOP}, puedes colocar un {$HOOK_MIONUEVO}
3, Ahora tenemos que indicar los módulos que pueden ir en nuestro hook para que el programa desde el panel de control nos permita modificarlo.
E inserto este código:
public function hookHooknuevo($params) { return $this->funcionquequeremso( $params ); }
En este caso recupero el valor de una variable global de la clase y la incorporo a mi hook. Pero podeis escribir vuestra nuevva función.
Ejemplo en /modules/blockcategories/blockcategories.php para crear un menu de categorías en la cabeza.
public function hookHooknuevo($params) {
global $smarty, $cookie;
$id_customer = (int)($params['cookie']->id_customer);
// Get all groups for this customer and concatenate them as a string: "1,2,3..."
$groups = $id_customer ? implode(', ', Customer::getGroupsStatic($id_customer)) : _PS_DEFAULT_CUSTOMER_GROUP_;
$id_product = (int)(Tools::getValue('id_product', 0));
$id_category = (int)(Tools::getValue('id_category', 0));
$id_lang = (int)($params['cookie']->id_lang);
$smartyCacheId = 'blockcategories|'.$groups.'_'.$id_lang.'_'.$id_product.'_'.$id_category;
$smarty->cache_lifetime = 31536000; // 1 Year
Tools::enableCache();
if (!$this->isCached('blockcategories_header.tpl', $smartyCacheId))
{
$maxdepth = Configuration::get('BLOCK_CATEG_MAX_DEPTH');
if (!$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('
SELECT c.id_parent, c.id_category, cl.name, cl.description, cl.link_rewrite
FROM `'._DB_PREFIX_.'category` c
LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON (c.`id_category` = cl.`id_category` AND `id_lang` = '.$id_lang.')
LEFT JOIN `'._DB_PREFIX_.'category_group` cg ON (cg.`id_category` = c.`id_category`)
WHERE (c.`active` = 1 OR c.`id_category` = 1)
'.((int)($maxdepth) != 0 ? ' AND `level_depth` <= '.(int)($maxdepth) : '').'
AND cg.`id_group` IN ('.pSQL($groups).')
GROUP BY id_category
ORDER BY `level_depth` ASC, '.(Configuration::get('BLOCK_CATEG_SORT') ? 'cl.`name`' : 'c.`position`').' '.(Configuration::get('BLOCK_CATEG_SORT_WAY') ? 'DESC' : 'ASC'))
)
return;
$resultParents = array();
$resultIds = array();
foreach ($result as &$row)
{
$resultParents[$row['id_parent']][] = &$row;
$resultIds[$row['id_category']] = &$row;
}
//$nbrColumns = Configuration::get('BLOCK_CATEG_NBR_COLUMNS_FOOTER');
$nbrColumns = Configuration::get('BLOCK_CATEG_NBR_COLUMN_FOOTER');
if (!$nbrColumns)
$nbrColumns=3;
$numberColumn = abs(sizeof($result)/$nbrColumns);
$widthColumn= floor(100/$nbrColumns);
$smarty->assign('numberColumn', $numberColumn);
$smarty->assign('widthColumn', $widthColumn);
$blockCategTree = $this->getTree($resultParents, $resultIds, Configuration::get('BLOCK_CATEG_MAX_DEPTH'));
unset($resultParents);
unset($resultIds);
$isDhtml = (Configuration::get('BLOCK_CATEG_DHTML') == 1 ? true : false);
if (Tools::isSubmit('id_category'))
{
$cookie->last_visited_category = $id_category;
$smarty->assign('currentCategoryId', $cookie->last_visited_category);
}
if (Tools::isSubmit('id_product'))
{
if (!isset($cookie->last_visited_category) OR !Product::idIsOnCategoryId($id_product, array('0' => array('id_category' => $cookie->last_visited_category))))
{
$product = new Product($id_product);
if (isset($product) AND Validate::isLoadedObject($product))
$cookie->last_visited_category = (int)($product->id_category_default);
}
$smarty->assign('currentCategoryId', (int)($cookie->last_visited_category));
}
$smarty->assign('blockCategTree', $blockCategTree);
if (file_exists(_PS_THEME_DIR_.'modules/blockcategories/blockcategories_header.tpl'))
$smarty->assign('branche_tpl_path', _PS_THEME_DIR_.'modules/blockcategories/category-tree-branch.tpl');
else
$smarty->assign('branche_tpl_path', _PS_MODULE_DIR_.'blockcategories/category-tree-branch.tpl');
$smarty->assign('isDhtml', $isDhtml);
}
$display = $this->display(__FILE__, 'blockcategories_header.tpl', $smartyCacheId);
Tools::restoreCacheSettings();
return $display;
}/* fin nuevo hook */
En este caso me he creado un nuevo tpl para mostrar, que es lo que está en color morado.
4. Hemos creado nuestro hook, le hemos asigniado los módulos/funciones que queremos permitirle mostrar y le hemos indicado una nomenclatura para colocarlo en los tpls.
Ahora sólo nos queda ir al panel de control compilar como he indicado al principio e ir a modulos/posiciones para indicar a nuestro nuevo hook que modulo queremos inisertar. En este caso nos dejará insertar el bloque de categorías como se lo hemos puesto en el archivo php.
No hay comentarios:
Publicar un comentario