Jump to content

(Solucionado) Ordenar categorías en dos idiomas en Prestashop 1.5


Recommended Posts

Hola a todos.

 

Yo tengo una duda: ¿Cómo ordenar las categorías por orden alfabético en dos idiomas?Por ejemplo, lo ordeno manualmente en español en Catálogo/categorías/vista pero luego en inglés me queda desordenado y viceversa. ¿Existe alguna manera de que queden ordenados en los dos idiomas?

 

Gracias

Edited by vmontanya (see edit history)
Link to comment
Share on other sites

Hola, es que en teoría, no se puede en Prestashop ordenar las categorías según idioma, para ello seria ir al Controller y decirle que haga un order by por nombre, pero eso se tendria que programar. Si no encuentras una solución fácil por el foro te hecho un cable.

Link to comment
Share on other sites

La parte de ordenador solo sirve para la 1.4, acabo de instalarlo y no puedes hacer lo de las categorias, lástima, tenia buena pinta.

 

Segun indican en el mismo tema, sirve tambien para Prestashop 1.5

 

Edito: Tienes razón.

Link to comment
Share on other sites

Para el bloque de categorías:

 

Pestaña Módulos -> Módulos, busca el modulo llamado:

 

Bloque de categorias

 

y donde dice:

 

Orden

 

señala por nombre.

 

(Puedes definir si ascendente o descendente)

 

Adjunto Imagen

 

ordenb.png

 

----

 

Después para ordenar las subcategorias cuando las ves en el centro de la pantalla:

 

En el fichero:

 

/classes/Category.php

 

Buscas esto:

 

public function getSubCategories($id_lang, $active = true)
{
  if (!Validate::isBool($active))
die(Tools::displayError());
 $groups = FrontController::getCurrentCustomerGroups();
 $sql_groups = (count($groups) ? 'IN ('.implode(',', $groups).')' : '='.(int)Group::getCurrent()->id);
 $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
  SELECT c.*, cl.id_lang, cl.name, cl.description, cl.link_rewrite, cl.meta_title, cl.meta_keywords, cl.meta_description
  FROM `'._DB_PREFIX_.'category` c
  '.Shop::addSqlAssociation('category', 'c').'
  LEFT JOIN `'._DB_PREFIX_.'category_lang` cl
ON (c.`id_category` = cl.`id_category`
AND `id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('cl').')
  LEFT JOIN `'._DB_PREFIX_.'category_group` cg
ON (cg.`id_category` = c.`id_category`)
  WHERE `id_parent` = '.(int)$this->id.'
'.($active ? 'AND `active` = 1' : '').'
AND cg.`id_group` '.$sql_groups.'
  GROUP BY c.`id_category`
  ORDER BY `level_depth` ASC, category_shop.`position` ASC
 ');

 

Y prueba dejarlo asi:

 

$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
  SELECT c.*, cl.id_lang, cl.name, cl.description, cl.link_rewrite, cl.meta_title, cl.meta_keywords, cl.meta_description
  FROM `'._DB_PREFIX_.'category` c
  '.Shop::addSqlAssociation('category', 'c').'
  LEFT JOIN `'._DB_PREFIX_.'category_lang` cl
ON (c.`id_category` = cl.`id_category`
AND `id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('cl').')
  LEFT JOIN `'._DB_PREFIX_.'category_group` cg
ON (cg.`id_category` = c.`id_category`)
  WHERE `id_parent` = '.(int)$this->id.'
'.($active ? 'AND `active` = 1' : '').'
AND cg.`id_group` '.$sql_groups.'
  GROUP BY c.`id_category`
  ORDER BY cl.`name` ASC, `level_depth` ASC, category_shop.`position` ASC
 ');

 

Ah, por cierto, recuerdo que lo correcto es hacer un override de:

 

/classes/Category.php

 

en

 

/override/classes/

.

 

Saludos,

 

--

 

ASC = Ascendente
DESC = Descendente

Link to comment
Share on other sites

Prueba lo que te he comentado directamente sobre la clase, y si te funciona, te paso el override, para que no tengas que modificar el original de la clase y asi en futuras actualizaciones evitar problemas.

 

Saludos,

Link to comment
Share on other sites

Hola chicos,

gracias por las respuestas. La verdad es que pensaba que sería más sencillo. Me da miedo tocar el código ahora que ya tengo la tienda funcionando. Así que de momento lo dejo tal como está y lo dejo para un freelance el día que lo contrate ya que tengo que arreglar también lo de los media servers. Así aprovecho y que me eche una mano con todo.

 

Mil gracias de todos modos Alfonso y Nadie!

Link to comment
Share on other sites

Hola chicos,

gracias por las respuestas. La verdad es que pensaba que sería más sencillo. Me da miedo tocar el código ahora que ya tengo la tienda funcionando. Así que de momento lo dejo tal como está y lo dejo para un freelance el día que lo contrate ya que tengo que arreglar también lo de los media servers. Así aprovecho y que me eche una mano con todo.

 

Mil gracias de todos modos Alfonso y Nadie!

 

Vamos hacer una cosa, envíame los datos de acceso a tu tienda por privado y te lo dejo puesto lo de las categorias. (No te preocupes que no te cobro nada)

Link to comment
Share on other sites

El tema ha sido solucionado.

 

Os cuento el usuario vmontanya usaba esta plantilla: http://themeforest.n...5-theme/3865279 llamada Millenium.

 

El usuario realmente hablaba del "Menu horizontal" (porque en su caso es el unico sitio donde se imprimen las categorias y subcategorias, pues no se le muestran en el centro ni tiene activado el bloque de categorias), el modulo es una modificación llamada:

 

blocktopmenu_mod

 

Asi que fijandome en el fichero:

 

/modules/blocktopmenu_mod/blocktopmenu_mod.php

 

Vi que hacia una llamada a la función:

 

getChildren

 

de la clase:

 

Category.php

 

Entonces depende editar la función en el fichero:

 

Category.php

 

Cree un fichero dentro de:

 

/override/classes/

 

llamado

 

Category.php

 

con este contenido:

 

<?php
class Category extends CategoryCore
{
public static function getChildren($id_parent, $id_lang, $active = true, $id_shop = false)
{
 if (!Validate::isBool($active))
  die(Tools::displayError());
 $query = 'SELECT c.`id_category`, cl.`name`, cl.`link_rewrite`, category_shop.`id_shop`
 FROM `'._DB_PREFIX_.'category` c
 LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON (c.`id_category` = cl.`id_category`'.Shop::addSqlRestrictionOnLang('cl').')
 '.Shop::addSqlAssociation('category', 'c').'
 WHERE `id_lang` = '.(int)$id_lang.'
 AND c.`id_parent` = '.(int)$id_parent.'
 '.($active ? 'AND `active` = 1' : '').'
 GROUP BY c.`id_category`
 ORDER BY cl.`name` ASC';
 return Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($query);
}
}

 

De esa manera como a el le interesaba mostrar las subcategorias por debajo de las categorias que añadía al menú organizadas, aparecen organizadas.

  • Like 2
Link to comment
Share on other sites

Me he quedado con la boca abierta. Mil gracias. Si lo ves bien, Nadie, doy el tema por solucionado.

Un placer ayudarte y servirte!

 

Si das el tema como solucionado, edita el titulo del tema, editando el primer mensaje, pulsando en editar, y después en "Usar editor completo", añadiendo la palabra "Solucionado" al titulo, esto ayudara, a mantener una mayor organización en el foro.

 

Un saludo y recuerda que estaremos en el foro, para guiarte por este mundo oscuro y tenebroso.

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...