Bueno, esto es mas bien una nota personal a la que recurriré para no malgastar tantisimo tiempo en buscar ciertas cosas, a continuación describo algunos lugares interesantes para modificar cosas del panel de administración:
Modificar / Añadir columnas en el panel administración de productos:
Esa es la ruta donde tendremos que añadir la columna que queremos. Es tan sencillo como:
- Añadir una nueva columna a la BBDD.
- Añadir a fields_list la nueva columna tal que así:
//Alerta de stock David Escudero $this->fields_list['stock_alert'] = array( 'title' => $this->l('Stock Alert'), 'type' => 'bool', 'davidescudero' => 'true', 'stock' => 'status', 'align' => 'text-center', 'class' => 'fixed-width-sm' );
Como veis, hay un parametro por ahí que se cuela «davidescudero», es el parametro que utilizo para personalizar el icono que aparecerá en el backend en el listado de productos.
- En este caso, ya nos aparecerá en la lista de productos nuestra nueva columna, pero, si queremos añadir una consulta a la BBDD personalizada la cosa se complica un poquitín. Os indico a continuación:
- Habrá que añadir nuestra consulta a «$this->_select» y «$this->_join»
- Si quereis hacer un var_dump de la consulta que se crea y probarla en MYSQL directamente tendreis que iros a:
Y en la linea donde aparece lo siguiente: (en la versión 1.6.1.7 está en la linea ‘3246’)} while (empty($this->_list)); //AQUI HACER EL VAR_DUMP DE LA CONSULTA A PROBAR // var_dump($this->_listsql); Hook::exec('action'.$this->controller_name.'ListingResultsModifier', array( 'list' => &$this->_list, 'list_total' => &$this->_listTotal, ));
- Otro dato a tener en cuenta es que por lo menos en mi versión hay un problema con el fields_list(‘reference’), he tenido que añadirle el siguiente parametro para que me quede así, ya que hacía una consulta cuya tabla tambien contenia la columna ‘reference’, lo que me daba un error de ambigüedad.
$this->fields_list['reference'] = array( 'title' => $this->l('Reference'), 'align' => 'left', 'filter_key' => 'a!reference' //LINEA AÑADIDA );
- Si queremos añadir un icono personalizado, como por ejemplo de alerta o de lo que sea, hay que liarla mucho!!
- Añadir a fields_list nuestra columna/consulta de tipo bool, tal y como he añadido yo el fields_list de ‘stock_alert’.
- Ahora vamos a una clase llamada HelperList.php, ubicada en:
Y en el método displayListContent() por la linea donde dice:foreach ($this->fields_list as $key => $params) {
Hay que añadir otro elseif con nuestro caso, en mi caso, el field se llama «stock».
//ADMINPRODUCTCONTROLLER //Alerta de stock David Escudero $this->fields_list['stock_alert'] = array( 'title' => $this->l('Stock Alert'), 'type' => 'bool', 'davidescudero' => 'true', 'stock' => 'status', //ESTE ES EL QUE TENDREMOS QUE CAZAR EN HELPERLIST 'align' => 'text-center', 'class' => 'fixed-width-sm' ); //EN HELPER LIST, AÑADO elseif (isset($params['stock'])){ //David Escudero $this->_list[$index][$key] = $this->displayStockAlert( $tr[$key] );
Como verán, tenemos que crear en esta misma clase un metodo llamado ‘displayStockAlert($value)’ que será el encargado de poner nuestros iconos.
public function displayStockAlert($value) { $tpl_stock = $this->createTemplate('list_action_stock_alert.tpl'); $tpl_stock->assign(array( 'enabled' => (bool)$value )); return $tpl_stock->fetch(); }
Y como veis tambien, hay que crear un nuevo fichero TPL, llamadlo como querais, yo lo he llamado ‘list_action_stock_alert.tpl’, hay que crearlo en:
/carpetaDeAdministracion/themes/default/template/helpers/list/list_action_stock_alert.tpl<i class="fa fa-exclamation-triangle{if !$enabled} hidden{/if}" aria-hidden="true"></i> <i class="fa fa-check-circle-o{if $enabled} hidden{/if}" aria-hidden="true"></i>
- Bueno, ahora solo nos falta decirle al prestashop, que el valor que le pasamos en esa casilla es HTML, sino lo que nos pondrá será el HTML del TPL en texto. He aquí el parámetro Davidescudero que he puesto en fields_list.
Tenemos que irnos al fichero list_content.tpl ubicado en:
/carpetaDeAdministracion/themes/default/template/helpers/list/list_content.tpl
Ahora, aquí, añadiremos la variable que le dirá al prestashop que nuestra columna no tiene datos de texto, sino que son de tipo HTML.{if isset($tr.$key)} {if isset($params.active)||isset($params.Davidescudero)} {$tr.$key}
El resultado es buenísimo para llevar el control desde un solo sitio:
Como veis he añadido dos columnas a la tabla de productos, «Stock alert» con un icono personalizado, que me alerta si hay alguna combinación de ese producto que está bajo de stock y «Pedido almacén» que me dice si hay algún pedido realizado de ese producto o combinación de producto a almacen y me da la fecha estimada de entrega.