Foros del Web » Programando para Internet » PHP »

No hay modo de añadir <br> \ n $foo

Estas en el tema de No hay modo de añadir <br> \ n $foo en el foro de PHP en Foros del Web. Hola buenas Tengo un código MySQL dentro de un archivo PHP prestashop en el que no se como añadir un salto de linea <br> En ...
  #1 (permalink)  
Antiguo 19/10/2018, 19:09
 
Fecha de Ingreso: febrero-2008
Mensajes: 160
Antigüedad: 16 años, 2 meses
Puntos: 1
No hay modo de añadir <br> \ n $foo

Hola buenas

Tengo un código MySQL dentro de un archivo PHP prestashop en el que no se como añadir un salto de linea <br>

En SEPARATOR no me permite añadir comillas simples porque la pagina luego no me carga '\ n'

Solo me permite añadir comillas dobles "\ n" o \''. "\n" .'\'

Probe todo esto:
SEPARATOR "/n"
SEPARATOR "/r"
SEPARATOR "<br>"
SEPARATOR \'$foo\'

y esto sin suerte:
echo str_replace(' ', PHP_EOL, $foo);
SEPARATOR \' \'

Este es mi codigo:
Código PHP:
class AdminOrdersControllerCore extends AdminController
{
    public 
$toolbar_title;

    protected 
$statuses_array = array();

    public function 
__construct()
    {
        
$this->_select '
        a.id_currency,
        (SELECT GROUP_CONCAT(so.text_note SEPARATOR "\n") FROM `'
._DB_PREFIX_.'ordernotes_note` so WHERE so.id_order = a.id_order) as text_note,
        IF(a.valid, 1, 0) badge_success'

Es la cadena (SELECT GROUP_CONCAT(so.text_note SEPARATOR "\n") donde quiero añadir el espaciado <br>, también intente del siguiente modo sin suerte (SELECT GROUP_CONCAT(so.text_note, \'<br>\')
  #2 (permalink)  
Antiguo 20/10/2018, 01:56
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 5 meses
Puntos: 154
Respuesta: No hay modo de añadir <br> \ n $foo

Hola lepe,

Yo creo que no te permite porque tienes la consulta entre comillas simples, entonces es como si la terminaras, yo probaría a encerrar la consulta entre comillas dobles y seguir a partir de ahí.

Espero que te sirva...
  #3 (permalink)  
Antiguo 20/10/2018, 05:29
 
Fecha de Ingreso: febrero-2008
Mensajes: 160
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: No hay modo de añadir <br> \ n $foo

He intentado lo siguiente y me da sintaxis error:

(so.text_note SEPARATOR ("\n"))
(so.text_note SEPARATOR "(\n)")

(so.text_note, ("\n"))

Las comillas simples ' ' no me las deja añadir ni con corchete ni sin el.

Y si modifico las comillas simples por las dobles en el inicio y final de $this->_select = " entonces reporta error.

¿Alguna idea para un conseguir el <br>?
  #4 (permalink)  
Antiguo 20/10/2018, 17:19
 
Fecha de Ingreso: abril-2006
Mensajes: 583
Antigüedad: 18 años
Puntos: 120
Respuesta: No hay modo de añadir <br> \ n $foo

Cita:
Iniciado por lepe Ver Mensaje
He intentado lo siguiente y me da sintaxis error:

(so.text_note SEPARATOR ("\n"))
(so.text_note SEPARATOR "(\n)")

(so.text_note, ("\n"))

Las comillas simples ' ' no me las deja añadir ni con corchete ni sin el.

Y si modifico las comillas simples por las dobles en el inicio y final de $this->_select = " entonces reporta error.

¿Alguna idea para un conseguir el <br>?
a lo que se referia es las COMILLAS de PHP, cuando usas comillas simples en PHP, es un string puro y duro, si usas comillas dobles "" php tratara de procesar VARIABLES, y caracteres especiales como \n

ejemplo

Código PHP:
Ver original
  1. <?php
  2. $algo = ' aca no procesa \n nada $var ';
y esto
Código PHP:
Ver original
  1. ?php
  2. $algo = " aca no procesa \n nada $var ";
no hacen lo mismo
  #5 (permalink)  
Antiguo 21/10/2018, 08:06
 
Fecha de Ingreso: febrero-2008
Mensajes: 160
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: No hay modo de añadir <br> \ n $foo

Las comillas que vienen especificadas en todo el php y mysql no las puedo cambiar, debo de centrarme en cambiar solo la siguiente cadena marcada en rojo para poder añadir un <br> ya sea sustituyendo SEPARATOR " | " o envolverlo en etiquetas <p> </p> que lo intenté al principio y final pero me reportaba error de sintaxis, al estar dicha cadena dentro de $this->_select = ' xxxx '; si añado otra vez las comillas ' ' me reporta error de sintaxis


$this->_select = '
a.id_currency,
(SELECT GROUP_CONCAT(so.text_note SEPARATOR " | ") FROM `'._DB_PREFIX_.'ordernotes_note` so WHERE so.id_order = a.id_order) as text_note,
IF(a.valid, 1, 0) badge_success';

¿alguna sugerencia?
saludos

Última edición por lepe; 21/10/2018 a las 08:11
  #6 (permalink)  
Antiguo 21/10/2018, 17:01
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: No hay modo de añadir <br> \ n $foo

y si cuando quieres mostrar los datos los pasas a br con nl2br(str) ?

Ejemplo:

nl2br("hola\nComo estas?")

o en su defecto

$str = str_replace("\n", "<br>", $str);

Última edición por alvaro_trewhela; 21/10/2018 a las 19:33
  #7 (permalink)  
Antiguo 22/10/2018, 06:29
 
Fecha de Ingreso: febrero-2008
Mensajes: 160
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: No hay modo de añadir <br> \ n $foo

hola gracias por tu aportación

el nl2br lo intenté añadir antes de parentesis, despues etc y me reportaba error.

el $str = str_replace("\n", "<br>", $str); y el \n no reporta error pero los ignora.
Así es como los añadi:

Cita:
class AdminOrdersControllerCore extends AdminController
{
public $toolbar_title;

protected $statuses_array = array();

public function __construct()
{
$this->bootstrap = true;
$this->table = 'order';
$this->className = 'Order';
$this->lang = false;
$this->addRowAction('view');
$this->explicitSelect = true;
$this->allow_export = true;
$this->deleted = false;
$str = str_replace("\n", "<br>", $str);


parent::__construct();

$this->_select = '
a.id_currency,
(SELECT GROUP_CONCAT(so.text_note SEPARATOR "\n") FROM `'._DB_PREFIX_.'ordernotes_note` so WHERE so.id_order = a.id_order) as text_note,
IF(a.valid, 1, 0) badge_success';
saludos
  #8 (permalink)  
Antiguo 23/10/2018, 16:40
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: No hay modo de añadir <br> \ n $foo

Estimado es bastante extraño a mi me corre perfecto:

  #9 (permalink)  
Antiguo 24/10/2018, 17:17
 
Fecha de Ingreso: abril-2006
Mensajes: 583
Antigüedad: 18 años
Puntos: 120
Respuesta: No hay modo de añadir <br> \ n $foo

este hilo se esta ahciendo innecesariamente grande, el problema es simple, pero esparaba que encontraras la solucion

Código PHP:
Ver original
  1. class AdminOrdersControllerCore extends AdminController
  2. {
  3.     public $toolbar_title;
  4.  
  5.     protected $statuses_array = array();
  6.  
  7.     public function __construct()
  8.     {
  9.         $this->_select = '
  10.        a.id_currency,
  11.        (SELECT GROUP_CONCAT(so.text_note SEPARATOR "\n") FROM `'._DB_PREFIX_.'ordernotes_note` so WHERE so.id_order = a.id_order) as text_note,
  12.        IF(a.valid, 1, 0) badge_success';

cambialo por
Código PHP:
Ver original
  1. class AdminOrdersControllerCore extends AdminController
  2. {
  3.     public $toolbar_title;
  4.  
  5.     protected $statuses_array = array();
  6.  
  7.     public function __construct()
  8.     {
  9.         $this->_select = '
  10.        a.id_currency,
  11.        (SELECT GROUP_CONCAT(so.text_note SEPARATOR "<br/>") FROM `'._DB_PREFIX_.'ordernotes_note` so WHERE so.id_order = a.id_order) as text_note,
  12.        IF(a.valid, 1, 0) badge_success';
ahora con ello deberia estar perfecto, todo, pero ten en cuenta que el RESULTADO, puede ser procesado para evitar HTML INJECTION el cual el "<br/>" sera ignorado o borrado, asi que mas que la consulta, fijate en que partes del codigo acaba ese SELECT
  #10 (permalink)  
Antiguo 24/10/2018, 19:23
 
Fecha de Ingreso: febrero-2008
Mensajes: 160
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: No hay modo de añadir <br> \ n $foo

Como dije en el titulo el <br> lo ignora y cualquier otro codigo que añada, lo está detectando como texto <br> sin formato html. Creo que la razón de porque ignora los <br>, \n o los str replace es porque este código está dentro de un CONCAT que a su vez está dentro de otras comillas. Remarco en rojo donde empieza y acaba el select y en azul el código de la linea entera donde deseo añadir el <br> entendiendo que la separación por linea termina en una coma simple.
Posiblemente la solución sería "interpretar el <br>" pero no se como hacerlo

$this->_select = '
a.id_currency,
(SELECT GROUP_CONCAT(so.text_note SEPARATOR "<br/>") FROM `'._DB_PREFIX_.'ordernotes_note` so WHERE so.id_order = a.id_order) as text_note,
IF(a.valid, 1, 0) badge_success';

Última edición por lepe; 24/10/2018 a las 19:37
  #11 (permalink)  
Antiguo 25/10/2018, 22:54
Avatar de jsstoni  
Fecha de Ingreso: enero-2015
Ubicación: Maracaibo
Mensajes: 82
Antigüedad: 9 años, 3 meses
Puntos: 4
Respuesta: No hay modo de añadir <br> \ n $foo

el seperador solo es iterpretado como texto no como html debes aplicar cierta logica para lograr eso en tu caso puedes usar como separador una "coma," o "pleca |" o lo que se te ocurra

Código PHP:
Ver original
  1. $this->_select = '
  2.        a.id_currency,
  3.        (SELECT GROUP_CONCAT(so.text_note SEPARATOR "|") FROM `'._DB_PREFIX_.'ordernotes_note` so WHERE so.id_order = a.id_order) as text_note,
  4.        IF(a.valid, 1, 0) badge_success';

en tu caso utilizo una pleca o barra vertical " | " para separar los datos
para hacer la lista del resultado obtenenido por la query separo a todos por " | " almeceno en un array para luego con un join unir todo mediante un <br>

Código PHP:
Ver original
  1. $lista = explode("|", $resultado);
  2. echo join("<br>", $lista);
__________________
Desarrollo web Front End Realtime NodeJs
  #12 (permalink)  
Antiguo 26/10/2018, 21:32
 
Fecha de Ingreso: febrero-2008
Mensajes: 160
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: No hay modo de añadir <br> \ n $foo

Gracias por el aporte, lo intenté del siguiente modo y sigue interpretando el "|" como texto sin formato html. ¿Añadi el JOIN que aportaste en un lugar incorrecto?

Cita:
class AdminOrdersControllerCore extends AdminController
{
public $toolbar_title;

protected $statuses_array = array();

public function __construct()
{
$this->bootstrap = true;
$this->table = 'order';
$this->className = 'Order';
$this->lang = false;
$this->addRowAction('view');
$this->explicitSelect = true;
$this->allow_export = true;
$this->deleted = false;

parent::__construct();

$lista = explode("|", $resultado);
echo join("<br>", $lista);


$this->_select = '
a.id_currency,
(SELECT GROUP_CONCAT(so.text_note SEPARATOR "|") FROM `'._DB_PREFIX_.'ordernotes_note` so WHERE so.id_order = a.id_order) as text_note,
IF(a.valid, 1, 0) badge_success';

Última edición por lepe; 26/10/2018 a las 22:14
  #13 (permalink)  
Antiguo 28/10/2018, 03:54
Avatar de jsstoni  
Fecha de Ingreso: enero-2015
Ubicación: Maracaibo
Mensajes: 82
Antigüedad: 9 años, 3 meses
Puntos: 4
Respuesta: No hay modo de añadir <br> \ n $foo

Puedes colocar todo el codigo completo del controller que estas utilizando ?
__________________
Desarrollo web Front End Realtime NodeJs
  #14 (permalink)  
Antiguo 28/10/2018, 11:49
 
Fecha de Ingreso: febrero-2008
Mensajes: 160
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: No hay modo de añadir <br> \ n $foo

El fichero AdminOrdersController.php de prestashop es muy largo (2500 lineas) e incluye código que se muestra en páginas diferentes a la lista de pedidos que estoy modificando, adjuntaré las primeras lineas que intervienen en la página de order list remarcando en rojo mis modificaciones y en azul los <br> que no funcionan, parece ser que este fichero tambien me ignora el DATE_FORMAT en español:


Cita:
<?php

use PrestaShop\PrestaShop\Adapter\StockManager;
setlocale(LC_TIME, "es_ES");

class AdminOrdersControllerCore extends AdminController
{
public $toolbar_title;

protected $statuses_array = array();

public function __construct()
{
$this->bootstrap = true;
$this->table = 'order';
$this->className = 'Order';
$this->lang = false;
$this->addRowAction('view');
$this->explicitSelect = true;
$this->allow_export = true;
$this->deleted = false;

parent::__construct();
$lista = explode("|", $resultado);
echo join("<br>", $lista);


$this->_select = '
a.reference,
a.id_currency,
a.id_order AS id_pdf,
CONCAT(c.`firstname`, \' \', c.`lastname`, \'<br/> \', c.`email`) AS `customer`,
osl.`name` AS `osname`,
os.`color`,
(SELECT (DATE_FORMAT(DATE_ADD(op.`date_add`,INTERVAL 7 + IF((WEEKDAY(DATE_ADD(op.`date_add`, INTERVAL 7 DAY)) IN (5)), 2, 0) + IF((WEEKDAY(DATE_ADD(op.`date_add`, INTERVAL 7 DAY)) IN (6)), 1, 0) DAY), "%W, %e de %M")) FROM `'._DB_PREFIX_.'order_payment` op WHERE op.`order_reference` = a.`reference`) as dat,
(SELECT GROUP_CONCAT(so.product_quantity, \' x \', so.product_name SEPARATOR " | ") FROM `'._DB_PREFIX_.'order_detail` so WHERE so.id_order = a.id_order) as productos,
IF((SELECT so.id_order FROM `'._DB_PREFIX_.'orders` so WHERE so.id_customer = a.id_customer AND so.id_order < a.id_order LIMIT 1) > 0, 0, 1) as new,
country_lang.name as cname,
IF(a.valid, 1, 0) badge_success';

$this->_join = '
LEFT JOIN `'._DB_PREFIX_.'order_carrier` oc ON (a.`id_order` = oc.`id_order`)
LEFT JOIN `'._DB_PREFIX_.'customer` c ON (c.`id_customer` = a.`id_customer`)
LEFT JOIN `'._DB_PREFIX_.'order_payment` op ON (op.`order_reference` = a.`reference`)
INNER JOIN `'._DB_PREFIX_.'address` address ON address.id_address = a.id_address_delivery
INNER JOIN `'._DB_PREFIX_.'country` country ON address.id_country = country.id_country
INNER JOIN `'._DB_PREFIX_.'country_lang` country_lang ON (country.`id_country` = country_lang.`id_country` AND country_lang.`id_lang` = '.(int)$this->context->language->id.')
LEFT JOIN `'._DB_PREFIX_.'order_state` os ON (os.`id_order_state` = a.`current_state`)
LEFT JOIN `'._DB_PREFIX_.'order_state_lang` osl ON (os.`id_order_state` = osl.`id_order_state` AND osl.`id_lang` = '.(int)$this->context->language->id.')';
$this->_orderBy = 'id_order';
$this->_orderWay = 'DESC';
$this->_use_found_rows = true;
$this->_group = 'GROUP BY a.id_order';

$statuses = OrderState::getOrderStates((int)$this->context->language->id);
foreach ($statuses as $status) {
$this->statuses_array[$status['id_order_state']] = $status['name'];
}

$this->fields_list = array(
'id_order' => array(
'title' => $this->trans('ID', array(), 'Admin.Global'),
'align' => 'text-center'
),
'reference' => array(
'title' => $this->trans('PEDIDO', array(), 'Admin.Global'),
'align' => 'text-center'
),
'customer' => array(
'title' => $this->trans('Customer', array(), 'Admin.Global'),
'havingFilter' => tr
'email' => array(
'title' => $this->l('Correo Electrónico'),
'filter_key' => 'a!email',
'class' => 'fixed-width-sm'
),ue,
'class' => 'fixed-width-xxl'
),
'tracking_number' => array(
'title' => $this->l('Tracking'),
'callback' => 'buildTrackingLink',
'align' => 'center'
),
'dat' => array(
'title' => $this->l('Día Entrega'),
'align' => 'center',
'orderby' => false,
'search' => false,
'class' => 'fixed-width-xs',
'callback' => 'getIsDat'
),
'productos' => array(
'title' => $this->l('Producto'),
'class' => 'fixed-width-xxl'
),

);

if (Configuration::get('PS_B2B_ENABLE')) {
$this->fields_list = array_merge($this->fields_list, array(
'company' => array(
'title' => $this->trans('Company', array(), 'Admin.Global'),
'filter_key' => 'c!company'
),
));
}

$this->fields_list = array_merge($this->fields_list, array(
'total_paid_tax_incl' => array(
'title' => $this->trans('Total', array(), 'Admin.Global'),
'align' => 'text-center',
'type' => 'price',
'currency' => true,
'callback' => 'setOrderCurrency',
'badge_success' => true
),
'osname' => array(
'title' => $this->trans('Status', array(), 'Admin.Global'),
'type' => 'select',
'color' => 'color',
'list' => $this->statuses_array,
'filter_key' => 'os!id_order_state',
'filter_type' => 'int',
'order_key' => 'osname'
),
'date_add' => array(
'title' => $this->trans('Date', array(), 'Admin.Global'),
'align' => 'text-right',
'type' => 'datetime',
'filter_key' => 'a!date_add'
),
'id_pdf' => array(
'title' => $this->trans('PDF', array(), 'Admin.Global'),
'align' => 'text-center',
'callback' => 'printPDFIcons',
'orderby' => false,
'search' => false,
'remove_onclick' => true
)
));

$this->shopLinkType = 'shop';
$this->shopShareDatas = Shop::SHARE_ORDER;

if (Tools::isSubmit('id_order')) {
// Save context (in order to apply cart rule)
$order = new Order((int)Tools::getValue('id_order'));
$this->context->cart = new Cart($order->id_cart);
$this->context->customer = new Customer($order->id_customer);
}

$this->bulk_actions = array(
'updateOrderStatus' => array('text' => $this->trans('Change Order Status', array(), 'Admin.Orderscustomers.Feature'), 'icon' => 'icon-refresh')
);
}

public function getIsDat($a, $order)
{
return '<span title="" data-toggle="tooltip" class="label-tooltip" data-original-title="'.$order['dat'].'" data-html="true" data-placement="top"><i class="icon-truck"></i></span>';
}

public function buildTrackingLink($group, $row)
{
$order = new Order($row['id_order']);
$carrier = Carrier::getCarrierByReference($order->id_carrier);
return '<a class="tracking_number" target="_blank" href="http://www.seur.com/seguimiento-online.do?segOnlineIdentificador='.$row['tracking_number'].'"><script>$(\'document\').ready(function(){$(\'. tracking_number\').parent().removeAttr(\'onclick\' );});</script>'.$row['tracking_number'].'</a>';
}


public static function setOrderCurrency($echo, $tr)
{
$order = new Order($tr['id_order']);
return Tools::displayPrice($echo, (int)$order->id_currency);
}

public function initPageHeaderToolbar()
{
parent::initPageHeaderToolbar();

if (empty($this->display)) {
$this->page_header_toolbar_btn['new_order'] = array(
'href' => self::$currentIndex.'&addorder&token='.$this->token,
'desc' => $this->trans('Add new order', array(), 'Admin.Orderscustomers.Feature'),
'icon' => 'process-icon-new'
);
}

if ($this->display == 'add') {
unset($this->page_header_toolbar_btn['save']);
}

if (Context::getContext()->shop->getContext() != Shop::CONTEXT_SHOP && isset($this->page_header_toolbar_btn['new_order'])
&& Shop::isFeatureActive()) {
unset($this->page_header_toolbar_btn['new_order']);
}
}
En ese mismo fichero adjunto un código en el que se usa un str_replace
Código PHP:
$amount str_replace(',''.'Tools::getValue('payment_amount')); 

Última edición por lepe; 28/10/2018 a las 12:07

Etiquetas: modo, mysql, select
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:50.