miércoles, 16 de septiembre de 2015

Mostrar más información en la lista de proveedores.

El problema base a solucionar va a ser, en la lista de proveedores (suppliers), no se muestra ningún dato respecto a la dirección, sólo título, imagen y descripción.

Vamos a usar el caso de mostrar por ejemplo la dirección y el móvil en el listado.

En este caso, lo primero a modificar es el resultado del método getSuppliers que lógicamente está en /classes/Supplier.php

Original: $query->select('s.*, sl.`description`');
Modificado: $query->select('s.*, sl.`description`, ad.`phone_mobile`, ad.`address1`');

Añadir la línea en negrita:
$query->leftJoin('supplier_lang', 'sl', 's.`id_supplier` = sl.`id_supplier` AND sl.`id_lang` = '.(int)$id_lang); 
$query->leftJoin('address', 'ad', 'ad.`id_supplier` = s.`id_supplier`'); 

El siguiente paso, es ya modificar (añadir a) la vista: {directorio_plantilla}/supplier-list.tpl  

<div class="description">
          {l s="Móvil: "}{$supplier.phone_mobile}<br/>
          {l s="Dirección: "}{$supplier.address1}
          {*$supplier.description|truncate:180:'...'*}

 </div> 

 Ver también: Añadir campos a los proveedores

Añadir campos en Proveedores - Suppliers

Para añadir nuevos campos en los proveedores hay que modificar 3 partes:

1. Crear el campo en la base de datos, en la tabla {prefijoBD}_supplier creamos el/los campos que necesitemos.
2. Añadir el atributo a su clase /classes/Supplier.php
Ejemplo de añadir mail:
/** @var string Mail */
    public $mail;

{..}
public static $definition = array(
        'table' => 'supplier',
        'primary' => 'id_supplier',
        'multilang' => true,
        'fields' => array(
            'name' =>                array('type' => self::TYPE_STRING, 'validate' => 'isCatalogName', 'required' => true, 'size' => 64),

            'mail' =>                array('type' => self::TYPE_STRING, 'validate' => 'isCatalogName', 'required' => true, 'size' => 128),
{..}  

3. Añadir el campo al formulario de la administración /controllers/admin/AdminSuppliersController.php 
Ejemplo de añadir mail:
public function renderForm()
    {

{...} 
               array(
                    'type' => 'text',
                    'label' => $this->l('Name'),
                    'name' => 'name',
                    'required' => true,
                    'col' => 4,
                    'hint' => $this->l('Invalid characters:').' &lt;&gt;;=#{}',
                ),
               
array(
                    'type' => 'text',
                    'label' => $this->l('Email'),
                    'name' => 'mail',
                    'required' => true,
                    'col' => 4,
                    'hint' => $this->l('Invalid characters:').' &lt;&gt;;=#{}',
                ),
 
 4. Posible ejemplo de uso en supplier.tpl
<fieldset>
               <label class="attribute_label">Email</label>
               <div class="attribute_list">{$supplier->mail}</div>
</fieldset>

Igualmente para modificar fabricantes - manufactures se puede aplicar a su clase, controlador y vista fácilmente.

Ejemplo de uso en la tienda online vinumplus.es