Foros del Web » Programando para Internet » PHP »

PHP OO Algún entendido para 2 lineas en smarty?

Estas en el tema de Algún entendido para 2 lineas en smarty? en el foro de PHP en Foros del Web. Hola gente Estoy realizando unas modificaciones en un fichero core de prestashop y no tengo ni idea de smarty, pero aún así conseguí sacar los ...
  #1 (permalink)  
Antiguo 25/04/2018, 04:39
 
Fecha de Ingreso: febrero-2008
Mensajes: 141
Antigüedad: 10 años, 2 meses
Puntos: 1
Algún entendido para 2 lineas en smarty?

Hola gente

Estoy realizando unas modificaciones en un fichero core de prestashop y no tengo ni idea de smarty, pero aún así conseguí sacar los variables que estaba buscando.

Para lo que me gustaría pedir ayuda es para implementar un codigo html en el codigo smarty php del fichero.

Mi código es el siguiente:
Código:
CONCAT(c.`firstname`, \'  \', c.`lastname`, \' \', c.`note`) AS `customer`,
Estas variables me están dando los datos:
Nombre_cliente + Apellidos_cliente + Una_Nota_añadida_por_mi

Puesto que la variable c.`note` es un texto largo que me descuadra el backoffice porque no hay sitio para todo, deseo añadir una imagen con el c.`note` introducida en una especie de Title o ToolTip al pasar el cursor y que se muestre solo si yo añadi dicha nota

En html sería algo parecido a esto lo que deseo:

Código HTML:
{if $customer->note}
<div class="tooltip">
<img src="https://localhost/img/admin/warning-icon.gif" width="20px" height="12px" />
{$customer->note}
</div>
{/if}
En smarty la variable {$customer->note} debería ser c.`note` ya que es la que encontré en otro fichero de prestashop.

¿Alguien me sabría decir como sustituir el CONCAT(c.`firstname`, \' \', c.`lastname`, \' \', c.`note`) AS `customer`, marcado en rojo por el html que adjunté arriba?

muchas gracias
  #2 (permalink)  
Antiguo 25/04/2018, 06:11
 
Fecha de Ingreso: mayo-2011
Ubicación: Palma de Mallorca
Mensajes: 89
Antigüedad: 7 años
Puntos: 3
Respuesta: Algún entendido para 2 lineas en smarty?

Hola,

yo no sé nada de smarty, pero quizá pueda darte una idea de lo que necesitas, a ver si puedes modificarlo.

Si el concat lo has hecho tu, podrías quitar el c.note del concat y añadirlo aparte, algo así:

Código PHP:
Ver original
  1. CONCAT(c.`firstname`, \'  \', c.`lastname`) AS `customer`, c.`note` AS `cust_note`

Luego lo llamas en la variable y lo añades al html.

Código HTML:
Ver original
  1. {if $customer->cust_note}
  2. <div class="tooltip">
  3. <img src="https://localhost/img/admin/warning-icon.gif" width="20px" height="12px" />
  4. {$customer->cust_note}
  5. </div>
  6. {/if}

Repito, no se si se puede, pero es la solución que yo le veo, si alguien que entienda algo de smarty aporta mucha más luz en su solución, pues guíate por ella.

Un saludo.
  #3 (permalink)  
Antiguo 25/04/2018, 14:41
 
Fecha de Ingreso: febrero-2008
Mensajes: 141
Antigüedad: 10 años, 2 meses
Puntos: 1
Respuesta: Algún entendido para 2 lineas en smarty?

Hola

Aporto como era el codigo:

Código PHP:
public function __construct()
    {

    
$this->_select 
        
CONCAT(LEFT(c.`firstname`, 1), . , c.`lastname`) AS `customer`, 
y luego se envia esta variable para mostrarla en una columna:

Código PHP:
$this->fields_list = array(
            
'customer' => array(
                
'title' => $this->l('Customer'),
                
'havingFilter' => true,
            ), 
Entonces yo lo modifique para mostrar el firstname completo y la nota al cliente:
CONCAT(c.`firstname`, \' \', c.`lastname`, \' \', c.`note`) AS `customer`,

Y se muestran las variables deseadas, ahora no sé como sustituir la variable c.`note` con el codigo de abajo para que me entre mostrandose en un TITLE:

{if $customer->cust_note}
<div class="tooltip">
<img src="https://localhost/img/admin/warning-icon.gif" width="20px" height="12px" />
{$customer->cust_note}
</div>
{/if}

¿El Smarty es como añadir PHP puro pero con añadiendo más espacios y comillas?
  #4 (permalink)  
Antiguo 25/04/2018, 18:45
 
Fecha de Ingreso: febrero-2008
Mensajes: 141
Antigüedad: 10 años, 2 meses
Puntos: 1
Respuesta: Algún entendido para 2 lineas en smarty?

Estoy copiando un codigo que añadia un icono distinto si el cliente era masculino o femenino, aporto la comparación entre ambos códigos a ver si alguien sabe decirme en que voy fallando (la variable "note" es la mia y la de "gender" es de la que voy copiando) :
Código:
$this->_select = '
c.id_gender,
c.`note` AS `note`,
Código del que copio:
Código:
		$genders = array();
		$genders_icon = array();
		$genders_icon[] = array('src' => '../genders/Unknown.jpg', 'alt' => '');
		foreach (Gender::getGenders() as $gender)
		{
		$gender_file = 'genders/'.$gender->id.'.jpg';
		if (file_exists(_PS_IMG_DIR_.$gender_file))
		$genders_icon[$gender->id] = array('src' => '../'.$gender_file, 'alt' => $gender->name);
		else
		$genders_icon[$gender->id] = array('src' => '../genders/Unknown.jpg', 'alt' => $gender->name);
		$genders[$gender->id] = $gender->name;
		}
Código que intento adaptar para añadir mi icono:
Código HTML:
		$note_icon[] = array('src' => '../genders/Unknown.jpg', 'title' => 'c.`note`');
		$notes[$customer->note] = $customer->note;
Ahora las columnas de las que copio:
Código:
		'id_gender' => array(
		'title' => $this->l('Title'),
		'width' => 70,
		'align' => 'center',
		'icon' => $genders_icon,
		'orderby' => false,
		'type' => 'select',
		'list' => $genders,
		'filter_key' => 'c!id_gender',
		),
Y ahora mis columnas adaptadas:
Código:
			'note' => array(
			'title' => $this->l('Note'),
			'icon' => $note_icon,
			'width' => 50
			),
Por el momento no consigo mostrar el icono en mi variable "note"(c.`note`)

Algun aporte por ahí?

gracias

Última edición por lepe; 25/04/2018 a las 18:52
  #5 (permalink)  
Antiguo 28/04/2018, 01:26
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.796
Antigüedad: 8 años, 8 meses
Puntos: 212
Respuesta: Algún entendido para 2 lineas en smarty?


Saludo
Pues con $customer->note debería funcionar siempre y cuando
$customer al igual que el ejemplo de genders sea una variable
que obtenga el resultado del efecto de consultar a la bd anteriormente
y se recorra esta en un foreach teorizando que son varios datos.
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #6 (permalink)  
Antiguo 28/04/2018, 10:15
 
Fecha de Ingreso: febrero-2008
Mensajes: 141
Antigüedad: 10 años, 2 meses
Puntos: 1
Respuesta: Algún entendido para 2 lineas en smarty?

Saludo

En otro fichero aquí muestro la coparación entre las variables
Código:
       $this->tpl_view_vars = array(
            'customer' => $customer,
            'gender' => $gender,
            'gender_image' => $gender_image,
            'customerLanguage' => $customerLanguage,
            // Add a Private note
            'customer_note' => Tools::htmlentitiesUTF8($customer->note),
Y aquí la variable que usa para guardar una nota privada otro fichero php:
Código:
    public function ajaxProcessUpdateCustomerNote()
    {
        if ($this->tabAccess['edit'] === '1') {
            $note = Tools::htmlentitiesDecodeUTF8(Tools::getValue('note'));
            $customer = new Customer((int)Tools::getValue('id_customer'));
            if (!Validate::isLoadedObject($customer)) {
                die('error:update');
            }
            if (!empty($note) && !Validate::isCleanHtml($note)) {
                die('error:validation');
            }
            $customer->note = $note;
            if (!$customer->update()) {
                die('error:update');
            }
            die('ok');
        }
    }
En el fichero donde añadi la nota a mostrar en una columna la muestra correctamente únicamente con el código:
Código PHP:
'note' => array(
    
'title' => $this->l('Note'),
), 
Lo primero que estoy intentando es lo que en teoría debería ser más facil que sería añadir la etiqueta ALT la cual en $genders_icon[$gender->id] = array('src' => '../'.$gender_file, 'alt' => $gender->name); se está mostrando correctamente con el $gender->name, pues esa misma variable que funciona la añado a cualquier otro código y no funciona:

$note_icon[] = array('src' => '../genders/Unknown.jpg', 'alt' => $gender->name);
$test_icon[] = array('src' => '../genders/Unknown.jpg', 'alt' => $customer->note);

En resumén, el código que debería funcionar copiando la lógica de gender debería ser:

Código PHP:
        $notes = array();
        
$notes_icon = array();
        
$notes_icon[] = array('src' => '../genders/Unknown.jpg''alt' => '');
        foreach (
$notes as $note)
        {
        
$note_file 'genders/'.$gender->id.'.jpg';
        if (
file_exists(_PS_IMG_DIR_.$note_file))
        
$notes_icon[$customer->id] = array('src' => '../'.$note_file'alt' => $customer->note);
        else
        
$notes_icon[$customer->id] = array('src' => '../genders/Unknown.jpg''alt' => $customer->note);
        
$notes[$customer->id] = $customer->note;
        } 
y aquí la columna a mostrar:
Código PHP:
    'note' => array(
        
'title' => $this->l('Title'),
        
'width' => 70,
        
'align' => 'center',
        
'icon' => $notes_icon,
        
'orderby' => false,
        
'type' => 'select',
        
'list' => $notes,
        
'filter_key' => 'c!note',
    ), 
¿Creeís que debería añadir alguna variable adicional para que se pueda mostrar cualquier variable en el ALT y cualquier icono en NOTE ?

gracias



La zona horaria es GMT -6. Ahora son las 12:26.