xonil Posted November 5, 2013 Share Posted November 5, 2013 (edited) Hola a todos, llevo revisando el foro desde hace un mes y siempre encuentro alguna solución, pero me he topado con un pequeño escollo y tengo que postear para ver si me pueden ayudar. Como he dicho antes, no he encontrado algún post que me solucione lo que busco, por eso creo un nuevo post. Lo que quiero conseguir es que en el bloque de proveedores aparezcan tanto en el desplegable como en la página donde se listan, no por orden alfabético, como lo hace por defecto, sino por el id. Espero haberme explicado bien. Tengo que aclarar que he cambiado el nombre del bloque por socios y he dejado sólo que se visualice el desplegable. También quiero cambiar el mensaje que aparece en la página donde se listan los proveedores que pone "Hay 24 proveedores", por el de "Hay 24 socios". Aquí está el link para facilitar la ayuda. http://www.zaragozasur.info/es/ Gracias de antemano y saludos. Edited November 5, 2013 by xonil (see edit history) Link to comment Share on other sites More sharing options...
nadie Posted November 5, 2013 Share Posted November 5, 2013 El texto "hay x proveedores", que te aparece aquí: http://www.zaragozasur.info/es/proveedores lo puedes cambiar perfectamente en la pestaña Localización -> Traducciones -> Modificar Traducciones -> Traducciones del Front-Office -> Bandera Español -> Cuadro de traducciones o fichero: /themes/plantilla/lang/es.php Busca esto: Hay %d fabricante. Hay %d fabricantes. y dejalo asi: Hay %d socio. Hay %d socios. Link to comment Share on other sites More sharing options...
xonil Posted November 5, 2013 Author Share Posted November 5, 2013 ok gracias Nadie. y para que aparezcan no por orden alfabético sino por id? pd. lo que no dije antes es que utilizo la plantilla por defecto. saludos. Link to comment Share on other sites More sharing options...
nadie Posted November 5, 2013 Share Posted November 5, 2013 ok gracias Nadie. y para que aparezcan no por orden alfabético sino por id? pd. lo que no dije antes es que utilizo la plantilla por defecto. saludos. En tu fichero: /classes/Supplier.php Busca esto: $query->orderBy(' s.`name` ASC'); Y dejalo asi: $query->orderBy(' s.`id_supplier` ASC'); Si te funciona, te digo como hacer un override de la clase, para dejarlo todo mas organizado. Saludos, Link to comment Share on other sites More sharing options...
xonil Posted November 5, 2013 Author Share Posted November 5, 2013 (edited) A la perfección, voy a cambiar lo de la traducción para el mensaje que cuenta el número de proveedores para que diga socios. Gracias Nadie, si quieres antes de cerrar y darlo como solucionarlo, me dices como poner el código como override para recogerlo y que esté mas organizado. Para la traducción lo he tocado de código como me has mostrado, Lo único es que en vez de fabricantes y fabricante he buscado proveedor y proveedores que es lo que tenia que cambiar. Edited November 5, 2013 by xonil (see edit history) Link to comment Share on other sites More sharing options...
nadie Posted November 6, 2013 Share Posted November 6, 2013 El override, seria crear un fichero llamado: Supplier.php en el directorio: /override/classes/ con este contenido: <?php class Supplier extends SupplierCore { public static function getSuppliers($get_nb_products = false, $id_lang = 0, $active = true, $p = false, $n = false, $all_groups = false) { if (!$id_lang) $id_lang = Configuration::get('PS_LANG_DEFAULT'); $query = new DbQuery(); $query->select('s.*, sl.`description`'); $query->from('supplier', 's'); $query->leftJoin('supplier_lang', 'sl', 's.`id_supplier` = sl.`id_supplier` AND sl.`id_lang` = '.(int)$id_lang); $query->join(Shop::addSqlAssociation('supplier', 's')); if ($active) $query->where('s.`active` = 1'); $query->orderBy(' s.`id_supplier` ASC'); $query->limit($n, ($p - 1) * $n); $query->groupBy('s.id_supplier'); $suppliers = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($query); if ($suppliers === false) return false; if ($get_nb_products) { $sql_groups = ''; if (!$all_groups) { $groups = FrontController::getCurrentCustomerGroups(); $sql_groups = (count($groups) ? 'IN ('.implode(',', $groups).')' : '= 1'); } foreach ($suppliers as $key => $supplier) { $sql = ' SELECT DISTINCT(ps.`id_product`) FROM `'._DB_PREFIX_.'product_supplier` ps JOIN `'._DB_PREFIX_.'product` p ON (ps.`id_product`= p.`id_product`) '.Shop::addSqlAssociation('product', 'p').' WHERE ps.`id_supplier` = '.(int)$supplier['id_supplier'].' AND ps.id_product_attribute = 0'. ($active ? ' AND product_shop.`active` = 1' : ''). ' AND product_shop.`visibility` NOT IN ("none")'. ($all_groups ? '' :' AND ps.`id_product` IN ( SELECT cp.`id_product` FROM `'._DB_PREFIX_.'category_group` cg LEFT JOIN `'._DB_PREFIX_.'category_product` cp ON (cp.`id_category` = cg.`id_category`) WHERE cg.`id_group` '.$sql_groups.' )'); $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql); $suppliers[$key]['nb_products'] = count($result); } } $nb_suppliers = count($suppliers); $rewrite_settings = (int)Configuration::get('PS_REWRITING_SETTINGS'); for ($i = 0; $i < $nb_suppliers; $i++) if ($rewrite_settings) $suppliers[$i]['link_rewrite'] = Tools::link_rewrite($suppliers[$i]['name']); else $suppliers[$i]['link_rewrite'] = 0; return $suppliers; } } Después borra el fichero: /cache/class_index.php para que prestashop te detecte el nuevo override. (No te preocupes, porque el fichero se regenera solo de nuevo) Link to comment Share on other sites More sharing options...
nadie Posted November 6, 2013 Share Posted November 6, 2013 Ah y se me olvido comentarte. (Para saber si el override te funciona u no, el fichero que modificastes el principio, quita la modificación que hiciste dejándolo como estaba originalmente ) Link to comment Share on other sites More sharing options...
xonil Posted November 6, 2013 Author Share Posted November 6, 2013 Listo, sí que me funciona, he creado el archivo en la carpeta override, he borrado el fichero class_index y he vuelto a dejar el código original, y los cambios se mantienen, es decir, se sobre escribe el fichero con el contenido de la carpeta override (creo que es eso lo que ocurre). Gracias de nuevo amigo. Link to comment Share on other sites More sharing options...
nadie Posted November 6, 2013 Share Posted November 6, 2013 Listo, sí que me funciona, he creado el archivo en la carpeta override, he borrado el fichero class_index y he vuelto a dejar el código original, y los cambios se mantienen, es decir, se sobre escribe el fichero con el contenido de la carpeta override (creo que es eso lo que ocurre). Gracias de nuevo amigo. Perfecto ! Un placer ayudarte y servirte ! Como has añadido la palabra "Solucionado" al titulo del tema, procedo a cerrar el tema. Link to comment Share on other sites More sharing options...
Recommended Posts