Jump to content

Insertar imágenes productos en la búsqueda ajax [SOLUCIONADO]


Rubén

Recommended Posts

Buenas de nuevo Rubén, esto es sencillo en prinsipio. Tan solo es darle la imagen al resultado del autocomplete... Es el módulo blocksearch que trae el presta de base...

 

Hoy no creo que pueda, pero lo hecharé un vistazo...

 

Saludos

 

Mmmmm, voy a ello

Link to comment
Share on other sites

Buenas de nuevo Rubén, esto es sencillo en prinsipio. Tan solo es darle la imagen al resultado del autocomplete... Es el módulo blocksearch que trae el presta de base...

 

Hoy no creo que pueda, pero lo hecharé un vistazo...

 

Saludos

 

Aporte gratuito: http://www.prestashop.com/forums/topic/237306-show-product-image-in-search-results-while-searching/ (No lo he probado, a ver...)

  • Like 1
Link to comment
Share on other sites

Es decir, como lo acoplo al menu que tengo? Ya se que si fuese la búsqueda normal con sustituir bastaría, pero en el caso de que la gente tenga como yo el buscador del menu por defecto...

Desactiva el buscador del menu, y acopla el otro buscador encima del menu.

 

No entiendo su funcionamiento, nos hechas una manita?

 

http://www.prestashop.com/forums/index.php?/topic/237306-show-product-image-in-search-results-while-searching/page__view__findpost__p__1172213

 

Aqui hay un paquete de descarga, dicen que funciona con la 1.5.4, pero vamos estoy con 44 de fiebre, y tampoco puedo mirarlo con calma.

  • Like 1
Link to comment
Share on other sites

Todo acoplado (como veis no genera error) pero no funciona

En las instrucciones del aporte que te he dicho, dicen que tienes que crear un nuevo tipo de imagen llamada "mini" en la pestaña Preferencias -> Imagenes

  • Like 1
Link to comment
Share on other sites

Pero si te encuentras mal déjalo, no tienes por que hacerlo tío, descansa

A mi me funciona, entre comillas, hace el intento de cojer las imagenes, pero no obtiene la ruta bien... (Sigo viendo)

  • Like 1
Link to comment
Share on other sites

Por cierto, te digo como colocar el bloque de busqueda de la cabecera en el menu horizontal, depende usar el bloque de busqueda que lleva el mismo menu.

 

Instalas el modulo logicamente...

 

Te vas al:

 

modules/blocksearch/blocksearch.css

 

Buscas algo como esto:

 

#search_block_top {
position: absolute;
right: 26%;
top: 34px;
}

 

Cuanto mas alto el "top", mas para abajo bajaras el buscador.

 

Cuanto menos "right", mas a la derecha se situara.

 

Luego, para cambiar el ancho del buscador en el mismo fichero, busca esto:

 

#search_block_top #search_query_top {
padding: 0 5px;
height: 23px;
width: 300px;
border: 1px solid #666;
border-right: 0 !important;
color: #666;
background: url(img/bg_search_input.png) repeat-x 0 0 #fff;
float: left;
}

 

Y cambia el "width:300px" a un numero inferior.

  • Like 1
Link to comment
Share on other sites

Por cierto, te digo como colocar el bloque de busqueda de la cabecera en el menu horizontal, depende usar el bloque de busqueda que lleva el mismo menu.

 

Instalas el modulo logicamente...

 

Te vas al:

 

modules/blocksearch/blocksearch.css

 

Buscas algo como esto:

 

#search_block_top {
position: absolute;
right: 26%;
top: 34px;
}

 

Cuanto mas alto el "top", mas para abajo bajaras el buscador.

 

Cuanto menos "right", mas a la derecha se situara.

 

Luego, para cambiar el ancho del buscador en el mismo fichero, busca esto:

 

#search_block_top #search_query_top {
padding: 0 5px;
height: 23px;
width: 300px;
border: 1px solid #666;
border-right: 0 !important;
color: #666;
background: url(img/bg_search_input.png) repeat-x 0 0 #fff;
float: left;
}

 

Y cambia el "width:300px" a un numero inferior.

 

Ya tio, pero no quiero hacer eso porque después se me descuadrara todo con la mala pata que tengo, estoy intentando fusionar las dos cosas, el menu y su busqueda con el bloque search

Link to comment
Share on other sites

Ya tio, pero no quiero hacer eso porque después se me descuadrara todo con la mala pata que tengo, estoy intentando fusionar las dos cosas, el menu y su busqueda con el bloque search

No se te descuadra. (El bloque de busqueda rapida, se mueve con la position relative, no se deberia descuadrar)

  • Like 1
Link to comment
Share on other sites

Quitas el bloque de busqueda del menu.

 

Haces lo que te he dicho para mover el bloque de busqueda rapida y vas cuadrando el top y el right para que quede en el menu.

 

(Yo lo he probado en una simulacion en tu tienda, y no parece que se descuadre)

  • Like 1
Link to comment
Share on other sites

Buenas de nuevo, para no depender del blocksearch yo lo hago de esta manera para añadirle el autocomplete a la caja de busqueda del menu...

 

Añado la llamada del plugin y del css a la función hookHeader del blocksearch.php

if (Configuration::get('PS_SEARCH_AJAX'))
{
$this->context->controller->addJqueryPlugin('autocomplete');
}

 

Le doy un id al input que tiene el tipo search. Digamos id="encuentrame-search-query" y le añado este script jquery con el if para el $ajaxsearch:

 

{if $ajaxsearch}
  <script type="text/javascript">
  // <![CDATA[
	$('document').ready( function() {
		$("#encuentrame-search-query").autocomplete(
			'{if $search_ssl == 1}{$link->getPageLink('search', true)}{else}{$link->getPageLink('search')}{/if}', {
				minChars: 3,
				max: 10,
				width: 250,
				selectFirst: false,
				scroll: true,
				dataType: "json",
				inputClass: "ac-input",
				resultsClass: "ac-results",
				loadingClass:  "ac-loading",
				formatItem: function(data, i, max, value, term) {
					return value;
				},
				parse: function(data) {
					var mytab = new Array();
					for (var i = 0; i < data.length; i++)
						mytab[mytab.length] = { data: data[i], value: data[i].cname + ' > ' + data[i].pname };
					return mytab;
				},
				extraParams: {
					ajaxSearch: 1,
					id_lang: {$cookie->id_lang}
				}
			}
		)
		.result(function(event, data, formatted) {
			$('#encuentrame-search-query').val(data.pname);
			document.location.href = data.product_link;
		})
	});
	// ]]>
</script>
{/if}

 

Y ya tenemos la caja con autocomplete sin la dependencia del blocksearch...

 

Un saludo

 

He dejado el primer php así:

public function hookHeader($params)
{
 if (Configuration::get('PS_SEARCH_AJAX'))
  $this->context->controller->addJqueryPlugin('autocomplete');
 $this->context->controller->addCSS(_THEME_CSS_DIR_.'product_list.css');
 $this->context->controller->addCSS(($this->_path).'blocksearch.css', 'all');
 if (Configuration::get('PS_SEARCH_AJAX'))
    $this->context->controller->addJqueryPlugin('autocomplete');
}

 

Y el input que hace búsqueda así:

 

{if $MENU_SEARCH}
   <li class="sf-search noBack" style="float:right">
 <form id="searchbox" action="{$link->getPageLink('search')}" method="get">
  <p>
   <input type="hidden" name="controller" value="search" />
   <input type="hidden" value="position" name="orderby"/>
   <input type="hidden" value="desc" name="orderway"/>
   <input type="text" name="search_query" value="Busca tu producto" onFocus="if (this.value=='Busca tu producto') this.value='';" {if $ajaxsearch}
  <script type="text/javascript">
  // <![CDATA[
		    $('document').ready( function() {
				    $("#encuentrame-search-query").autocomplete(
						    '{if $search_ssl == 1}{$link->getPageLink('search', true)}{else}{$link->getPageLink('search')}{/if}', {
								    minChars: 3,
								    max: 10,
								    width: 250,
								    selectFirst: false,
								    scroll: true,
								    dataType: "json",
								    inputClass: "ac-input",
								    resultsClass: "ac-results",
								    loadingClass:  "ac-loading",
								    formatItem: function(data, i, max, value, term) {
										    return value;
								    },
								    parse: function(data) {
										    var mytab = new Array();
										    for (var i = 0; i < data.length; i++)
												    mytab[mytab.length] = { data: data[i], value: data[i].cname + ' > ' + data[i].pname };
										    return mytab;
								    },
								    extraParams: {
										    ajaxSearch: 1,
										    id_lang: {$cookie->id_lang}
								    }
						    }
				    )
				    .result(function(event, data, formatted) {
						    $('#encuentrame-search-query').val(data.pname);
						    document.location.href = data.product_link;
				    })
		    });
		    // ]]>
    </script>
{/if}/>
  </p>
 </form>
   </li>
  {/if}

Edited by Rubén (see edit history)
Link to comment
Share on other sites

Te copio el código tal cual del blocktopmenu.php

 

<?php
/*
* 2007-2013 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License (AFL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/afl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to [email protected] so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
*  @author PrestaShop SA <[email protected]>
*  @copyright  2007-2013 PrestaShop SA
*  @license    http://opensource.org/licenses/afl-3.0.php  Academic Free License (AFL 3.0)
*  International Registered Trademark & Property of PrestaShop SA
*/
require (dirname(__FILE__).'/menutoplinks.class.php');
class Blocktopmenu extends Module
{
private $_menu = '';
private $_html = '';
private $user_groups;
/*
 * Pattern for matching config values
 */
private $pattern = '/^([A-Z_]*)[0-9]+/';
/*
 * Name of the controller
 * Used to set item selected or not in top menu
 */
private $page_name = '';
/*
 * Spaces per depth in BO
 */
private $spacer_size = '5';
public function __construct()
{
 $this->name = 'blocktopmenu';
 $this->tab = 'front_office_features';
 $this->version = 1.5;
 $this->author = 'PrestaShop';
 parent::__construct();
 $this->displayName = $this->l('Top horizontal menu');
 $this->description = $this->l('Add a new horizontal menu to the top of your e-commerce website.');
}
public function install()
{
 if (!parent::install() ||
  !$this->registerHook('displayTop') ||
  !Configuration::updateGlobalValue('MOD_BLOCKTOPMENU_ITEMS', 'CAT1,CMS1,CMS2,PRD1') ||
  !Configuration::updateGlobalValue('MOD_BLOCKTOPMENU_SEARCH', '1') ||
  !$this->registerHook('actionObjectCategoryUpdateAfter') ||
  !$this->registerHook('actionObjectCategoryDeleteAfter') ||
  !$this->registerHook('actionObjectCmsUpdateAfter') ||
  !$this->registerHook('actionObjectCmsDeleteAfter') ||
  !$this->registerHook('actionObjectSupplierUpdateAfter') ||
  !$this->registerHook('actionObjectSupplierDeleteAfter') ||
  !$this->registerHook('actionObjectManufacturerUpdateAfter') ||
  !$this->registerHook('actionObjectManufacturerDeleteAfter') ||
  !$this->registerHook('actionObjectProductUpdateAfter') ||
  !$this->registerHook('actionObjectProductDeleteAfter') ||
  !$this->registerHook('categoryUpdate') ||
  !$this->registerHook('actionShopDataDuplication') ||
  !$this->installDB())
  return false;
 return true;
}
public function installDb()
{
 return (Db::getInstance()->execute('
 CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'linksmenutop` (
  `id_linksmenutop` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `id_shop` INT UNSIGNED NOT NULL,
  `new_window` TINYINT( 1 ) NOT NULL,
  INDEX (`id_shop`)
 ) ENGINE = '._MYSQL_ENGINE_.' CHARACTER SET utf8 COLLATE utf8_general_ci;') &&
  Db::getInstance()->execute('
   CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'linksmenutop_lang` (
  `id_linksmenutop` INT NOT NULL,
  `id_lang` INT NOT NULL,
  `id_shop` INT NOT NULL,
  `label` VARCHAR( 128 ) NOT NULL ,
  `link` VARCHAR( 128 ) NOT NULL ,
  INDEX ( `id_linksmenutop` , `id_lang`, `id_shop`)
 ) ENGINE = '._MYSQL_ENGINE_.' CHARACTER SET utf8 COLLATE utf8_general_ci;'));
}
public function uninstall()
{
 if (!parent::uninstall() ||
  !Configuration::deleteByName('MOD_BLOCKTOPMENU_ITEMS') ||
  !Configuration::deleteByName('MOD_BLOCKTOPMENU_SEARCH') ||
  !$this->uninstallDB())
  return false;
 return true;
}
private function uninstallDb()
{
 Db::getInstance()->execute('DROP TABLE `'._DB_PREFIX_.'linksmenutop`');
 Db::getInstance()->execute('DROP TABLE `'._DB_PREFIX_.'linksmenutop_lang`');
 return true;
}
public function getContent()
{
 $id_lang = (int)Context::getContext()->language->id;
 $languages = $this->context->controller->getLanguages();
 $default_language = (int)Configuration::get('PS_LANG_DEFAULT');
 $labels = Tools::getValue('label') ? array_filter(Tools::getValue('label'), 'strlen') : array();
 $links_label = Tools::getValue('link') ? array_filter(Tools::getValue('link'), 'strlen') : array();
 $spacer = str_repeat(' ', $this->spacer_size);
 $divLangName = 'link_label';

 $update_cache = false;
 if (Tools::isSubmit('submitBlocktopmenu'))
 {
  if (Configuration::updateValue('MOD_BLOCKTOPMENU_ITEMS', Tools::getValue('items')))
   $this->_html .= $this->displayConfirmation($this->l('The settings have been updated.'));
  else
   $this->_html .= $this->displayError($this->l('Unable to update settings.'));
  Configuration::updateValue('MOD_BLOCKTOPMENU_SEARCH', (bool)Tools::getValue('search'));
  $update_cache = true;
 }
 else if (Tools::isSubmit('submitBlocktopmenuLinks'))
 {
  if ((!count($links_label)) && (!count($labels)))
   ;
  else if (!count($links_label))
   $this->_html .= $this->displayError($this->l('Please complete the "link" field.'));
  else if (!count($labels))
   $this->_html .= $this->displayError($this->l('Please add a label'));
  else if (!isset($labels[$default_language]))
   $this->_html .= $this->displayError($this->l('Please add a label for your default language.'));
  else
  {
   MenuTopLinks::add(Tools::getValue('link'), Tools::getValue('label'), Tools::getValue('new_window', 0), (int)Shop::getContextShopID());
   $this->_html .= $this->displayConfirmation($this->l('The link has been added.'));
  }
  $update_cache = true;
 }
 else if (Tools::isSubmit('submitBlocktopmenuRemove'))
 {
  $id_linksmenutop = Tools::getValue('id_linksmenutop', 0);
  MenuTopLinks::remove($id_linksmenutop, (int)Shop::getContextShopID());
  Configuration::updateValue('MOD_BLOCKTOPMENU_ITEMS', str_replace(array('LNK'.$id_linksmenutop.',', 'LNK'.$id_linksmenutop), '', Configuration::get('MOD_BLOCKTOPMENU_ITEMS')));
  $this->_html .= $this->displayConfirmation($this->l('The link has been removed'));
  $update_cache = true;
 }
 else if (Tools::isSubmit('submitBlocktopmenuEdit'))
 {
  $id_linksmenutop = (int)Tools::getValue('id_linksmenutop', 0);
  $id_shop = (int)Shop::getContextShopID();
  if (!Tools::isSubmit('link'))
  {
   $tmp = MenuTopLinks::getLinkLang($id_linksmenutop, $id_shop);
   $links_label_edit = $tmp['link'];
   $labels_edit = $tmp['label'];
   $new_window_edit = $tmp['new_window'];
  }
  else
  {
   MenuTopLinks::update(Tools::getValue('link'), Tools::getValue('label'), Tools::getValue('new_window', 0), (int)$id_shop, (int)$id_linksmenutop, (int)$id_linksmenutop);
   $this->_html .= $this->displayConfirmation($this->l('The link has been edited'));
  }
  $update_cache = true;
 }

 if ($update_cache)
  $this->clearMenuCache();

 $this->_html .= '
 <fieldset>
  <div class="multishop_info">
  '.$this->l('The modifications will be applied to').' '.(Shop::getContext() == Shop::CONTEXT_SHOP ? $this->l('shop').' '.$this->context->shop->name : $this->l('all shops')).'.
  </div>
  <legend><img src="'.$this->_path.'logo.gif" alt="" title="" />'.$this->l('Settings').'</legend>
  <form action="'.Tools::safeOutput($_SERVER['REQUEST_URI']).'" method="post" id="form">
   <div style="display: none">
   <label>'.$this->l('Items').'</label>
   <div class="margin-form">
 <input type="text" name="items" id="itemsInput" value="'.Tools::safeOutput(Configuration::get('MOD_BLOCKTOPMENU_ITEMS')).'" size="70" />
   </div>
   </div>
   <div class="clear"> </div>
   <table style="margin-left: 130px;">
 <tbody>
  <tr>
   <td style="padding-left: 20px;">
    <select multiple="multiple" id="availableItems" style="width: 300px; height: 160px;">';
 // BEGIN CMS
 $this->_html .= '<optgroup label="'.$this->l('CMS').'">';
 $this->getCMSOptions(0, 1, $id_lang);
 $this->_html .= '</optgroup>';
 // BEGIN SUPPLIER
 $this->_html .= '<optgroup label="'.$this->l('Supplier').'">';
 $suppliers = Supplier::getSuppliers(false, $id_lang);
 foreach ($suppliers as $supplier)
  $this->_html .= '<option value="SUP'.$supplier['id_supplier'].'">'.$spacer.$supplier['name'].'</option>';
 $this->_html .= '</optgroup>';
 // BEGIN Manufacturer
 $this->_html .= '<optgroup label="'.$this->l('Manufacturer').'">';
 $manufacturers = Manufacturer::getManufacturers(false, $id_lang);
 foreach ($manufacturers as $manufacturer)
  $this->_html .= '<option value="MAN'.$manufacturer['id_manufacturer'].'">'.$spacer.$manufacturer['name'].'</option>';
 $this->_html .= '</optgroup>';
 // BEGIN Categories
 $this->_html .= '<optgroup label="'.$this->l('Categories').'">';
 $this->getCategoryOption(1, (int)$id_lang, (int)Shop::getContextShopID());
 $this->_html .= '</optgroup>';

 // BEGIN Shops
 if (Shop::isFeatureActive())
 {
  $this->_html .= '<optgroup label="'.$this->l('Shops').'">';
  $shops = Shop::getShopsCollection();
  foreach ($shops as $shop)
  {
   if (!$shop->setUrl() && !$shop->getBaseURL())
 continue;
   $this->_html .= '<option value="SHOP'.(int)$shop->id.'">'.$spacer.$shop->name.'</option>';
  }
  $this->_html .= '</optgroup>';
 }

 // BEGIN Products
 $this->_html .= '<optgroup label="'.$this->l('Products').'">';
 $this->_html .= '<option value="PRODUCT" style="font-style:italic">'.$spacer.$this->l('Choose product ID').'</option>';
 $this->_html .= '</optgroup>';
 // BEGIN Menu Top Links
 $this->_html .= '<optgroup label="'.$this->l('Menu Top Links').'">';
 $links = MenuTopLinks::gets($id_lang, null, (int)Shop::getContextShopID());
 foreach ($links as $link)
 {
  if ($link['label'] == '')
  {
   $link = MenuTopLinks::get($link['id_linksmenutop'], $default_language, (int)Shop::getContextShopID());
   $this->_html .= '<option value="LNK'.(int)$link[0]['id_linksmenutop'].'">'.$spacer.$link[0]['label'].'</option>';
  }
  else
   $this->_html .= '<option value="LNK'.(int)$link['id_linksmenutop'].'">'.$spacer.$link['label'].'</option>';
 }
 $this->_html .= '</optgroup>';
 $this->_html .= '</select><br />
    <br />
    <a href="#" id="addItem" style="border: 1px solid rgb(170, 170, 170); margin: 2px; padding: 2px; text-align: center; display: block; text-decoration: none; background-color: rgb(250, 250, 250); color: rgb(18, 52, 86);">'.$this->l('Add').' >></a>
   </td>
   <td>
    <select multiple="multiple" id="items" style="width: 300px; height: 160px;">';
 $this->makeMenuOption();
 $this->_html .= '</select><br/>
    <br/>
    <a href="#" id="removeItem" style="border: 1px solid rgb(170, 170, 170); margin: 2px; padding: 2px; text-align: center; display: block; text-decoration: none; background-color: rgb(250, 250, 250); color: rgb(18, 52, 86);"><< '.$this->l('Remove').'</a>
   </td>
  </tr>
 </tbody>
   </table>
   <div class="clear"> </div>
   <script type="text/javascript">
   $(document).ready(function(){
 $("#addItem").click(add);
 $("#availableItems").dblclick(add);
 $("#removeItem").click(remove);
 $("#items").dblclick(remove);
 function add()
 {
  $("#availableItems option:selected").each(function(i){
   var val = $(this).val();
   var text = $(this).text();
   text = text.replace(/(^\s*)|(\s*$)/gi,"");
   if (val == "PRODUCT")
   {
    val = prompt("'.$this->l('Set ID product').'");
    if (val == null || val == "" || isNaN(val))
	 return;
    text = "'.$this->l('Product ID').' "+val;
    val = "PRD"+val;
   }
   $("#items").append("<option value=\""+val+"\">"+text+"</option>");
  });
  serialize();
  return false;
 }
 function remove()
 {
  $("#items option:selected").each(function(i){
   $(this).remove();
  });
  serialize();
  return false;
 }
 function serialize()
 {
  var options = "";
  $("#items option").each(function(i){
   options += $(this).val()+",";
  });
  $("#itemsInput").val(options.substr(0, options.length - 1));
 }
   });
   </script>
   <label for="s">'.$this->l('Search Bar').'</label>
   <div class="margin-form">
 <input type="checkbox" name="search" id="s" value="1"'.((Configuration::get('MOD_BLOCKTOPMENU_SEARCH')) ? ' checked=""': '').'/>
   </div>
   <p class="center">
 <input type="submit" name="submitBlocktopmenu" value="'.$this->l('Save ').'" class="button" />
   </p>
  </form>
 </fieldset><br />';
 $this->_html .= '
 <fieldset>
  <legend><img src="../img/admin/add.gif" alt="" title="" />'.$this->l('Add Menu Top Link').'</legend>
  <form action="'.Tools::safeOutput($_SERVER['REQUEST_URI']).'" method="post" id="form">
   ';
 foreach ($languages as $language)
 {
  $this->_html .= '
 <div id="link_label_'.(int)$language['id_lang'].'" style="display: '.($language['id_lang'] == $id_lang ? 'block' : 'none').';">
   <label>'.$this->l('Label').'</label>
   <div class="margin-form">
  <input type="text" name="label['.(int)$language['id_lang'].']" id="label_'.(int)$language['id_lang'].'" size="70" value="'.(isset($labels_edit[$language['id_lang']]) ? Tools::safeOutput($labels_edit[$language['id_lang']]) : '').'" />
 </div>
 ';
  $this->_html .= '
  <label>'.$this->l('Link').'</label>
   <div class="margin-form">
 <input type="text" name="link['.(int)$language['id_lang'].']" id="link_'.(int)$language['id_lang'].'" value="'.(isset($links_label_edit[$language['id_lang']]) ? Tools::safeOutput($links_label_edit[$language['id_lang']]) : '').'" size="70" />
   </div>
   </div>';
 }
 $this->_html .= '<label>'.$this->l('Language').'</label>
   <div class="margin-form">'.$this->displayFlags($languages, (int)$id_lang, $divLangName, 'link_label', true).'</div><p style="clear: both;"> </p>';
 $this->_html .= '<label style="clear: both;">'.$this->l('New Window').'</label>
   <div class="margin-form">
 <input style="clear: both;" type="checkbox" name="new_window" value="1" '.(isset($new_window_edit) && $new_window_edit ? 'checked' : '').'/>
   </div>
<div class="margin-form">';
 if (Tools::isSubmit('id_linksmenutop'))
  $this->_html .= '<input type="hidden" name="id_linksmenutop" value="'.(int)Tools::getValue('id_linksmenutop').'" />';
 if (Tools::isSubmit('submitBlocktopmenuEdit'))
  $this->_html .= '<input type="submit" name="submitBlocktopmenuEdit" value="'.$this->l('Edit').'" class="button" />';
 $this->_html .= '
 <input type="submit" name="submitBlocktopmenuLinks" value="'.$this->l('Add ').'" class="button" />
</div>
  </form>
 </fieldset><br />';
 $links = MenuTopLinks::gets((int)$id_lang, null, (int)Shop::getContextShopID());
 if (!count($links))
  return $this->_html;
 $this->_html .= '
 <fieldset>
  <legend><img src="../img/admin/details.gif" alt="" title="" />'.$this->l('List Menu Top Link').'</legend>
  <table style="width:100%;">
   <thead>
 <tr style="text-align: left;">
  <th>'.$this->l('Id Link').'</th>
  <th>'.$this->l('Label').'</th>
  <th>'.$this->l('Link').'</th>
  <th>'.$this->l('New Window').'</th>
  <th>'.$this->l('Action').'</th>
 </tr>
   </thead>
   <tbody>';
 foreach ($links as $link)
 {
  $this->_html .= '
 <tr>
  <td>'.(int)$link['id_linksmenutop'].'</td>
  <td>'.Tools::safeOutput($link['label']).'</td>
  <td><a href="'.Tools::safeOutput($link['link']).'"'.(($link['new_window']) ? ' target="_blank"' : '').'>'.Tools::safeOutput($link['link']).'</a></td>
  <td>'.(($link['new_window']) ? $this->l('Yes') : $this->l('No')).'</td>
  <td>
   <form action="'.Tools::safeOutput($_SERVER['REQUEST_URI']).'" method="post">
    <input type="hidden" name="id_linksmenutop" value="'.(int)$link['id_linksmenutop'].'" />
    <input type="submit" name="submitBlocktopmenuEdit" value="'.$this->l('Edit').'" class="button" />
    <input type="submit" name="submitBlocktopmenuRemove" value="'.$this->l('Remove').'" class="button" />
   </form>
  </td>
 </tr>';
 }
 $this->_html .= '</tbody>
  </table>
 </fieldset>';
 return $this->_html;
}
private function getMenuItems()
{
 return explode(',', Configuration::get('MOD_BLOCKTOPMENU_ITEMS'));
}
private function makeMenuOption()
{
 $menu_item = $this->getMenuItems();
 $id_lang = (int)$this->context->language->id;
 $id_shop = (int)Shop::getContextShopID();
 foreach ($menu_item as $item)
 {
  if (!$item)
   continue;
  preg_match($this->pattern, $item, $values);
  $id = (int)substr($item, strlen($values[1]), strlen($item));
  switch (substr($item, 0, strlen($values[1])))
  {
   case 'CAT':
 $category = new Category((int)$id, (int)$id_lang);
 if (Validate::isLoadedObject($category))
  $this->_html .= '<option value="CAT'.$id.'">'.$category->name.'</option>'.PHP_EOL;
 break;
   case 'PRD':
 $product = new Product((int)$id, true, (int)$id_lang);
 if (Validate::isLoadedObject($product))
  $this->_html .= '<option value="PRD'.$id.'">'.$product->name.'</option>'.PHP_EOL;
 break;
   case 'CMS':
 $cms = new CMS((int)$id, (int)$id_lang);
 if (Validate::isLoadedObject($cms))
  $this->_html .= '<option value="CMS'.$id.'">'.$cms->meta_title.'</option>'.PHP_EOL;
 break;
   case 'CMS_CAT':
 $category = new CMSCategory((int)$id, (int)$id_lang);
 if (Validate::isLoadedObject($category))
  $this->_html .= '<option value="CMS_CAT'.$id.'">'.$category->name.'</option>'.PHP_EOL;
 break;
   case 'MAN':
 $manufacturer = new Manufacturer((int)$id, (int)$id_lang);
 if (Validate::isLoadedObject($manufacturer))
  $this->_html .= '<option value="MAN'.$id.'">'.$manufacturer->name.'</option>'.PHP_EOL;
 break;
   case 'SUP':
 $supplier = new Supplier((int)$id, (int)$id_lang);
 if (Validate::isLoadedObject($supplier))
  $this->_html .= '<option value="SUP'.$id.'">'.$supplier->name.'</option>'.PHP_EOL;
 break;
   case 'LNK':
 $link = MenuTopLinks::get((int)$id, (int)$id_lang, (int)$id_shop);
 if (count($link))
 {
  if (!isset($link[0]['label']) || ($link[0]['label'] == ''))
  {
   $default_language = Configuration::get('PS_LANG_DEFAULT');
   $link = MenuTopLinks::get($link[0]['id_linksmenutop'], (int)$default_language, (int)Shop::getContextShopID());
  }
  $this->_html .= '<option value="LNK'.$link[0]['id_linksmenutop'].'">'.$link[0]['label'].'</option>';
 }
 break;
   case 'SHOP':
 $shop = new Shop((int)$id);
 if (Validate::isLoadedObject($shop))
  $this->_html .= '<option value="SHOP'.(int)$id.'">'.$shop->name.'</option>'.PHP_EOL;
 break;
  }
 }
}
private function makeMenu()
{
 $menu_items = $this->getMenuItems();
 $id_lang = (int)$this->context->language->id;
 $id_shop = (int)Shop::getContextShopID();
 foreach ($menu_items as $item)
 {
  if (!$item)
   continue;
  preg_match($this->pattern, $item, $value);
  $id = (int)substr($item, strlen($value[1]), strlen($item));
  switch (substr($item, 0, strlen($value[1])))
  {
   case 'CAT':
 $this->getCategory((int)$id);
 break;
   case 'PRD':
 $selected = ($this->page_name == 'product' && (Tools::getValue('id_product') == $id)) ? ' class="sfHover"' : '';
 $product = new Product((int)$id, true, (int)$id_lang);
 if (!is_null($product->id))
  $this->_menu .= '<li'.$selected.'><a href="'.$product->getLink().'">'.$product->name.'</a></li>'.PHP_EOL;
 break;
   case 'CMS':
 $selected = ($this->page_name == 'cms' && (Tools::getValue('id_cms') == $id)) ? ' class="sfHover"' : '';
 $cms = CMS::getLinks((int)$id_lang, array($id));
 if (count($cms))
  $this->_menu .= '<li'.$selected.'><a href="'.$cms[0]['link'].'">'.$cms[0]['meta_title'].'</a></li>'.PHP_EOL;
 break;
   case 'CMS_CAT':
 $category = new CMSCategory((int)$id, (int)$id_lang);
 if (count($category))
 {
  $this->_menu .= '<li><a href="'.$category->getLink().'">'.$category->name.'</a>';
  $this->getCMSMenuItems($category->id);
  $this->_menu .= '</li>'.PHP_EOL;
 }
 break;
   case 'MAN':
 $selected = ($this->page_name == 'manufacturer' && (Tools::getValue('id_manufacturer') == $id)) ? ' class="sfHover"' : '';
 $manufacturer = new Manufacturer((int)$id, (int)$id_lang);
 if (!is_null($manufacturer->id))
 {
  if (intval(Configuration::get('PS_REWRITING_SETTINGS')))
   $manufacturer->link_rewrite = Tools::link_rewrite($manufacturer->name, false);
  else
   $manufacturer->link_rewrite = 0;
  $link = new Link;
  $this->_menu .= '<li'.$selected.'><a href="'.$link->getManufacturerLink((int)$id, $manufacturer->link_rewrite).'">'.$manufacturer->name.'</a></li>'.PHP_EOL;
 }
 break;
   case 'SUP':
 $selected = ($this->page_name == 'supplier' && (Tools::getValue('id_supplier') == $id)) ? ' class="sfHover"' : '';
 $supplier = new Supplier((int)$id, (int)$id_lang);
 if (!is_null($supplier->id))
 {
  $link = new Link;
  $this->_menu .= '<li'.$selected.'><a href="'.$link->getSupplierLink((int)$id, $supplier->link_rewrite).'">'.$supplier->name.'</a></li>'.PHP_EOL;
 }
 break;
   case 'SHOP':
 $selected = ($this->page_name == 'index' && ($this->context->shop->id == $id)) ? ' class="sfHover"' : '';
 $shop = new Shop((int)$id);
 if (Validate::isLoadedObject($shop))
 {
  $link = new Link;
  $this->_menu .= '<li'.$selected.'><a href="'.$shop->getBaseURL().'">'.$shop->name.'</a></li>'.PHP_EOL;
 }
 break;
   case 'LNK':
 $link = MenuTopLinks::get((int)$id, (int)$id_lang, (int)$id_shop);
 if (count($link))
 {
  if (!isset($link[0]['label']) || ($link[0]['label'] == ''))
  {
   $default_language = Configuration::get('PS_LANG_DEFAULT');
   $link = MenuTopLinks::get($link[0]['id_linksmenutop'], $default_language, (int)Shop::getContextShopID());
  }
  $this->_menu .= '<li><a href="'.$link[0]['link'].'"'.(($link[0]['new_window']) ? ' target="_blank"': '').'>'.$link[0]['label'].'</a></li>'.PHP_EOL;
 }
 break;
  }
 }
}
private function getCategoryOption($id_category = 1, $id_lang = false, $id_shop = false, $recursive = true)
{
 $id_lang = $id_lang ? (int)$id_lang : (int)Context::getContext()->language->id;
 $category = new Category((int)$id_category, (int)$id_lang, (int)$id_shop);
 if (is_null($category->id))
  return;
 if ($recursive)
 {
  $children = Category::getChildren((int)$id_category, (int)$id_lang, true, (int)$id_shop);
  $spacer = str_repeat(' ', $this->spacer_size * (int)$category->level_depth);
 }
 $shop = (object) Shop::getShop((int)$category->getShopID());
 $this->_html .= '<option value="CAT'.(int)$category->id.'">'.(isset($spacer) ? $spacer : '').$category->name.' ('.$shop->name.')</option>';
 if (isset($children) && count($children))
  foreach ($children as $child)
  {
   $this->getCategoryOption((int)$child['id_category'], (int)$id_lang, (int)$child['id_shop']);
  }
}
private function getCategory($id_category, $id_lang = false, $id_shop = false)
{
 $id_lang = $id_lang ? (int)$id_lang : (int)Context::getContext()->language->id;
 $category = new Category((int)$id_category, (int)$id_lang);
 if ($category->level_depth > 1)
  $category_link = $category->getLink();
 else
  $category_link = $this->context->link->getPageLink('index');
 if (is_null($category->id))
  return;
 $children = Category::getChildren((int)$id_category, (int)$id_lang, true, (int)$id_shop);
 $selected = ($this->page_name == 'category' && ((int)Tools::getValue('id_category') == $id_category)) ? ' class="sfHoverForce"' : '';
 $is_intersected = array_intersect($category->getGroups(), $this->user_groups);
 // filter the categories that the user is allowed to see and browse
 if (!empty($is_intersected))
 {
  $this->_menu .= '<li '.$selected.'>';
  $this->_menu .= '<a href="'.$category_link.'">'.$category->name.'</a>';
  if (count($children))
  {
   $this->_menu .= '<ul>';
   foreach ($children as $child)
 $this->getCategory((int)$child['id_category'], (int)$id_lang, (int)$child['id_shop']);
   $this->_menu .= '</ul>';
  }
  $this->_menu .= '</li>';
 }
}
private function getCMSMenuItems($parent, $depth = 1, $id_lang = false)
{
 $id_lang = $id_lang ? (int)$id_lang : (int)Context::getContext()->language->id;
 if ($depth > 3)
  return;
 $categories = $this->getCMSCategories(false, (int)$parent, (int)$id_lang);
 $pages = $this->getCMSPages((int)$parent);
 if (count($categories) || count($pages))
 {
  $this->_menu .= '<ul>';
  foreach ($categories as $category)
  {
   $this->_menu .= '<li>';
   $this->_menu .= '<a href="#">'.$category['name'].'</a>';
   $this->getCMSMenuItems($category['id_cms_category'], (int)$depth + 1);
   $this->_menu .= '</li>';
  }
  foreach ($pages as $page)
  {
   $cms = new CMS($page['id_cms'], (int)$id_lang);
   $links = $cms->getLinks((int)$id_lang, array((int)$cms->id));
   $selected = ($this->page_name == 'cms' && ((int)Tools::getValue('id_cms') == $page['id_cms'])) ? ' class="sfHoverForce"' : '';
   $this->_menu .= '<li '.$selected.'>';
   $this->_menu .= '<a href="'.$links[0]['link'].'">'.$cms->meta_title.'</a>';
   $this->_menu .= '</li>';
  }
  $this->_menu .= '</ul>';
 }
}
private function getCMSOptions($parent = 0, $depth = 1, $id_lang = false)
{
 $id_lang = $id_lang ? (int)$id_lang : (int)Context::getContext()->language->id;
 $categories = $this->getCMSCategories(false, (int)$parent, (int)$id_lang);
 $pages = $this->getCMSPages((int)$parent, false, (int)$id_lang);
 $spacer = str_repeat(' ', $this->spacer_size * (int)$depth);
 foreach ($categories as $category)
 {
  $this->_html .= '<option value="CMS_CAT'.$category['id_cms_category'].'" style="font-weight: bold;">'.$spacer.$category['name'].'</option>';
  $this->getCMSOptions($category['id_cms_category'], (int)$depth + 1, (int)$id_lang);
 }
 foreach ($pages as $page)
  $this->_html .= '<option value="CMS'.$page['id_cms'].'">'.$spacer.$page['meta_title'].'</option>';
}

protected function getCacheId($name = null)
{
 parent::getCacheId($name);
 $page_name = in_array($this->page_name, array('category', 'supplier', 'manufacturer', 'cms', 'product')) ? $this->page_name : 'index';
 return 'blocktopmenu|'.$page_name.'-'.(int)$this->context->shop->id.'-'.implode(', ',$this->user_groups).'-'.(int)$this->context->language->id.'-'.(int)Tools::getValue('id_category').'-'.(int)Tools::getValue('id_manufacturer').'-'.(int)Tools::getValue('id_supplier').'-'.(int)Tools::getValue('id_cms').'-'.(int)Tools::getValue('id_product');
}
public function hookDisplayTop($param)
{
 $this->user_groups =  ($this->context->customer->isLogged() ? $this->context->customer->getGroups() : array(Configuration::get('PS_UNIDENTIFIED_GROUP')));
 $this->page_name = Dispatcher::getInstance()->getController();
 if (!$this->isCached('blocktopmenu.tpl', $this->getCacheId()))
 {
  $this->makeMenu();
  $this->smarty->assign('MENU_SEARCH', Configuration::get('MOD_BLOCKTOPMENU_SEARCH'));
  $this->smarty->assign('MENU', $this->_menu);
  $this->smarty->assign('this_path', $this->_path);
  if(Configuration::get('MOD_BLOCKTOPMENU_SEARCH') == 1){
	   $this->calculHookCommon($params);
  }
 }
 $this->context->controller->addJS($this->_path.'js/hoverIntent.js');
 $this->context->controller->addJS($this->_path.'js/superfish-modified.js');
 $this->context->controller->addCSS($this->_path.'css/superfish-modified.css');
 if (Configuration::get('PS_SEARCH_AJAX'))
	    {
			    $this->context->controller->addJqueryPlugin('autocomplete');
	    }
 $html = $this->display(__FILE__, 'blocktopmenu.tpl', $this->getCacheId());
 return $html;
}
private function calculHookCommon($params)
{
 $this->smarty->assign(array(
  'ENT_QUOTES' =>  ENT_QUOTES,
  'search_ssl' =>  Tools::usingSecureMode(),
  'ajaxsearch' =>  Configuration::get('PS_SEARCH_AJAX'),
  'instantsearch' => Configuration::get('PS_INSTANT_SEARCH'),
  'self' =>   dirname(__FILE__),
 ));
 return true;
}
private function getCMSCategories($recursive = false, $parent = 1, $id_lang = false)
{
 $id_lang = $id_lang ? (int)$id_lang : (int)Context::getContext()->language->id;
 if ($recursive === false)
 {
  $sql = 'SELECT bcp.`id_cms_category`, bcp.`id_parent`, bcp.`level_depth`, bcp.`active`, bcp.`position`, cl.`name`, cl.`link_rewrite`
   FROM `'._DB_PREFIX_.'cms_category` bcp
   INNER JOIN `'._DB_PREFIX_.'cms_category_lang` cl
   ON (bcp.`id_cms_category` = cl.`id_cms_category`)
   WHERE cl.`id_lang` = '.(int)$id_lang.'
   AND bcp.`id_parent` = '.(int)$parent;
  return Db::getInstance()->executeS($sql);
 }
 else
 {
  $sql = 'SELECT bcp.`id_cms_category`, bcp.`id_parent`, bcp.`level_depth`, bcp.`active`, bcp.`position`, cl.`name`, cl.`link_rewrite`
   FROM `'._DB_PREFIX_.'cms_category` bcp
   INNER JOIN `'._DB_PREFIX_.'cms_category_lang` cl
   ON (bcp.`id_cms_category` = cl.`id_cms_category`)
   WHERE cl.`id_lang` = '.(int)$id_lang.'
   AND bcp.`id_parent` = '.(int)$parent;
  $results = Db::getInstance()->executeS($sql);
  foreach ($results as $result)
  {
   $sub_categories = $this->getCMSCategories(true, $result['id_cms_category'], (int)$id_lang);
   if ($sub_categories && count($sub_categories) > 0)
 $result['sub_categories'] = $sub_categories;
   $categories[] = $result;
  }
  return isset($categories) ? $categories : false;
 }
}
private function getCMSPages($id_cms_category, $id_shop = false, $id_lang = false)
{
 $id_shop = ($id_shop !== false) ? (int)$id_shop : (int)Context::getContext()->shop->id;
 $id_lang = $id_lang ? (int)$id_lang : (int)Context::getContext()->language->id;
 $sql = 'SELECT c.`id_cms`, cl.`meta_title`, cl.`link_rewrite`
  FROM `'._DB_PREFIX_.'cms` c
  INNER JOIN `'._DB_PREFIX_.'cms_shop` cs
  ON (c.`id_cms` = cs.`id_cms`)
  INNER JOIN `'._DB_PREFIX_.'cms_lang` cl
  ON (c.`id_cms` = cl.`id_cms`)
  WHERE c.`id_cms_category` = '.(int)$id_cms_category.'
  AND cs.`id_shop` = '.(int)$id_shop.'
  AND cl.`id_lang` = '.(int)$id_lang.'
  AND c.`active` = 1
  ORDER BY `position`';
 return Db::getInstance()->executeS($sql);
}
public function hookActionObjectCategoryUpdateAfter($params)
{
 $this->clearMenuCache();
}

public function hookActionObjectCategoryDeleteAfter($params)
{
 $this->clearMenuCache();
}

public function hookActionObjectCmsUpdateAfter($params)
{
 $this->clearMenuCache();
}

public function hookActionObjectCmsDeleteAfter($params)
{
 $this->clearMenuCache();
}

public function hookActionObjectSupplierUpdateAfter($params)
{
 $this->clearMenuCache();
}

public function hookActionObjectSupplierDeleteAfter($params)
{
 $this->clearMenuCache();
}
public function hookActionObjectManufacturerUpdateAfter($params)
{
 $this->clearMenuCache();
}

public function hookActionObjectManufacturerDeleteAfter($params)
{
 $this->clearMenuCache();
}

public function hookActionObjectProductUpdateAfter($params)
{
 $this->clearMenuCache();
}

public function hookActionObjectProductDeleteAfter($params)
{
 $this->clearMenuCache();
}

public function hookCategoryUpdate($params)
{
 $this->clearMenuCache();
}

private function clearMenuCache()
{
 $this->_clearCache('blocktopmenu.tpl');
}

public function hookActionShopDataDuplication($params)
{
 $linksmenutop = Db::getInstance()->executeS('
  SELECT *
  FROM '._DB_PREFIX_.'linksmenutop
  WHERE id_shop = '.(int)$params['old_id_shop']
  );
 foreach($linksmenutop as $id => $link)
 {
  Db::getInstance()->execute('
   INSERT IGNORE INTO '._DB_PREFIX_.'linksmenutop (id_linksmenutop, id_shop, new_window)
   VALUES (null, '.(int)$params['new_id_shop'].', '.(int)$link['new_window'].')');

  $linksmenutop[$id]['new_id_linksmenutop'] = Db::getInstance()->Insert_ID();
 }

 foreach($linksmenutop as $id => $link)
 {
  $lang = Db::getInstance()->executeS('
 SELECT id_lang, '.(int)$params['new_id_shop'].', label, link
 FROM '._DB_PREFIX_.'linksmenutop_lang
 WHERE id_linksmenutop = '.(int)$link['id_linksmenutop'].' AND id_shop = '.(int)$params['old_id_shop']);

  foreach($lang as $l)
   Db::getInstance()->execute('
 INSERT IGNORE INTO '._DB_PREFIX_.'linksmenutop_lang (id_linksmenutop, id_lang, id_shop, label, link)
 VALUES ('.(int)$link['new_id_linksmenutop'].', '.(int)$l['id_lang'].', '.(int)$params['new_id_shop'].', '.(int)$l['label'].', '.(int)$l['link'].' )');
 }


}
}

 

Lo que no sé es como poner el código del TPL, no acabo de entenderlo

Link to comment
Share on other sites

Me cuelo por aqui para molestar como de costumbre.

 

Por simple entretenimiento, he entrado a la dirección esta:

 

http:/dogstore.es/tienda

 

Y veo que dice esto:

 

Link to database cannot be established: SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

 

Digo, voy a buscar en google esto:

 

SQLSTATE[HY000] [2002]

 

Y dice google, que a lo mejor es que se esta bloqueando la conexión a tu base de datos....

 

Habla con tu hosting... a ver..

 

Link to comment
Share on other sites

Ya tengo la imagen del producto, salgo a comer. Esta tarde posteo el tema, aunque quiero añadir un tpl para la busqueda instantánea...

 

Saludos

Ah Perfecto.

 

Entonces, ya puedo quedarme tranquilo, que entre ayer y hoy tengo una fiebre que no se quita.

 

Gracias por su colaboración.

  • Like 1
Link to comment
Share on other sites

Yo no veo descuadrado el menu, veo descuadrado todo menos el menu.

 

¿Que has tocado?

 

Correcto, ese es el problema, yo toqué lo que estabamos haciendo aquí, pero de repente se puso así y ni forzando recompilación, ni con el "flush" ni reemplazando los archivos originales ni nada de nada.

Link to comment
Share on other sites

Correcto, ese es el problema, yo toqué lo que estabamos haciendo aquí, pero de repente se puso así y ni forzando recompilación, ni con el "flush" ni reemplazando los archivos originales ni nada de nada.

 

Como tienes el fichero ese blocktopmenu.tpl que estoy leyendo por aqui que te han dicho... ¿?

Link to comment
Share on other sites

Como tienes el fichero ese blocktopmenu.tpl que estoy leyendo por aqui que te han dicho... ¿?

 

Tengo el original

{literal}
   <script type="text/javascript">
   $(document).ready(function(){
	    $("ul.sf-menu").supersubs({
			    minWidth:    12,   // minimum width of sub-menus in em units
			    maxWidth:    80,   // maximum width of sub-menus in em units
			    extraWidth:  1	   // extra width can ensure lines don't sometimes turn over
													   // due to slight rounding differences and font-family
	    }).superfish();  // call supersubs first, then superfish, so that subs are
											 // not display:none when measuring. Call before initialising
											 // containing tabs for same reason.
   });
   </script>
{/literal}
<script type="text/javascript" src="{$modules_dir}blocktopmenu/js/supersubs.js"></script>
{if $MENU != ''}
</div>
<!-- Menu -->
<div class="sf-contener clearfix">
 <ul class="sf-menu clearfix">
  {$MENU}
  {if $MENU_SEARCH}
   <li class="sf-search noBack" style="float:right">
 <form id="searchbox" action="{$link->getPageLink('search')}" method="get">
  <p>
   <input type="hidden" name="controller" value="search" />
   <input type="hidden" value="position" name="orderby"/>
   <input type="hidden" value="desc" name="orderway"/>
   <input type="text" name="search_query" value="Busca tu producto" onFocus="if (this.value=='Busca tu producto') this.value='';"/>
  </p>
 </form>
   </li>
  {/if}
 </ul>
 <div class="sf-right"> </div>
<!--/ Menu -->
{/if}

Link to comment
Share on other sites

Tengo el original

{literal}
<script type="text/javascript">
$(document).ready(function(){
		$("ul.sf-menu").supersubs({
				minWidth:	12,   // minimum width of sub-menus in em units
				maxWidth:	80,   // maximum width of sub-menus in em units
				extraWidth:  1	   // extra width can ensure lines don't sometimes turn over
													   // due to slight rounding differences and font-family
		}).superfish();  // call supersubs first, then superfish, so that subs are
											 // not display:none when measuring. Call before initialising
											 // containing tabs for same reason.
});
</script>
{/literal}
<script type="text/javascript" src="{$modules_dir}blocktopmenu/js/supersubs.js"></script>
{if $MENU != ''}
</div>
<!-- Menu -->
<div class="sf-contener clearfix">
 <ul class="sf-menu clearfix">
  {$MENU}
  {if $MENU_SEARCH}
<li class="sf-search noBack" style="float:right">
 <form id="searchbox" action="{$link->getPageLink('search')}" method="get">
  <p>
   <input type="hidden" name="controller" value="search" />
   <input type="hidden" value="position" name="orderby"/>
   <input type="hidden" value="desc" name="orderway"/>
   <input type="text" name="search_query" value="Busca tu producto" onFocus="if (this.value=='Busca tu producto') this.value='';"/>
  </p>
 </form>
</li>
  {/if}
 </ul>
 <div class="sf-right"> </div>
<!--/ Menu -->
{/if}

 

Estoy leyendo el tema, y aunque soy un agricultor, si restauras el blocktopmenu.php original, todo vuelve a la normalidad.

 

O aceptas el fichero modificado.

 

Y en el tpl estcho

 

{if $MENU != ''}
</div>

 

intecha dejarlo ashi:

 

{if $MENU != ''}

 

Y luego en el header.tpl

 

esto:

 

<div id="header_right" class="grid_6 omega">

 

por estcho

 

<div id="header_right" class="grid_9 omega">

Link to comment
Share on other sites

Estoy leyendo el tema, y aunque soy un agricultor, si restauras el blocktopmenu.php original, todo vuelve a la normalidad.

 

O aceptas el fichero modificado.

 

Y en el tpl estcho

 

{if $MENU != ''}
</div>

 

intecha dejarlo ashi:

 

{if $MENU != ''}

 

Y luego en el header.tpl

 

esto:

 

<div id="header_right" class="grid_6 omega">

 

por estcho

 

<div id="header_right" class="grid_9 omega">

 

Debería restaurarse verdad? Pues no lo hace, no tengo ni idea de por qué

Link to comment
Share on other sites

No veo el id en el input, con lo cual si has hecho los cambios que he posteado en el aporte. Pues ya sabes limpiar caches y compilación...

 

Tambien elimina el archivo class_index.php que está en la carpeta cache/

 

PD: desinstal el blocksearch que esta otra ves dando la lata...

 

Saludos

 

Mira ahora, si que esta porque se ve todo descuadrado

Link to comment
Share on other sites

/themes/la-plantilla-que-uses/header.tpl

 

Esto:

 

<div class="grid_6 omega" id="header_right">

 

Asi:

 

<div class="grid_9 omega" id="header_right">

 

Y se te quedara cuadrado.

 

Lo he cambiado y ahora no se ve.

Link to comment
Share on other sites

Ahora, te sala otra vez esto:

 

Link to database cannot be established: SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

 

que ya te salio antes......

 

Correcto, además sale cada vez que cambio algo que tenga que ver con este buscador.

Link to comment
Share on other sites

Bueno yo diria que es una capada de tu provehedor de host por superar un máximo de conecciones a la bd. O simplemente que el servidor donde alojan la bd a caido...

 

Debes de tomar contacto con ellos, y exiguir algo que no se dá mucho en España que es transparencia. Que te digan si te capan o es que se cae el servidor...

 

La cuestión es que he estado hablando con ellos siempre y siempre me han ayudado altruistamente, es más, cuando tenía hosting (no vps) me aumentaron características específicas porque no necesitaba más y no querían sacarme el dinero, por eso me extraña que me hayan capado, acabo de llamarlos y me han dado las gracias porque a lo mejor me cambian todo el VPS para que funcione.

 

Por un casual, no puede ser problema de los php?

Link to comment
Share on other sites

Por un casual, no puede ser problema de los php?

 

Buenas dias a todos,

 

Todo puede ser, pero no creo.

 

Por lo que comento Rubalcaba aquí http://www.prestasho...ost__p__1241722 parece que de un modo o otro estas limitado en ese sentido.

 

De todos modos, tu hosting te podra dar mas detalles..

 

Creo que eso lo tengo ilimitado.

Quien te diga la palabra ilimitado, te miente...

Link to comment
Share on other sites

Buenas dias a todos,

 

Todo puede ser, pero no creo.

 

Por lo que comento Rubalcaba aquí http://www.prestasho...ost__p__1241722 parece que de un modo o otro estas limitado en ese sentido.

 

De todos modos, tu hosting te podra dar mas detalles..

 

 

Quien te diga la palabra ilimitado, te miente...

 

 

Es decir, cuando he hablado con ellos me han dicho que era un error muy poco visto, que no sabían que ni por qué y que lo intentarían solucionar.

Link to comment
Share on other sites

Es decir, cuando he hablado con ellos me han dicho que era un error muy poco visto, que no sabían que ni por qué y que lo intentarían solucionar.

Vuelve a comentarselo, y dile que te pasa justo en los momentos, en los que realizas las busquedas (por que parece eso... ¿no?)

 

Si un hosting serio, aunque exista la posibilidad de que el problema pueda no ser de ellos, tendran un registro para ver las cosas con detalles..

Link to comment
Share on other sites

Bueno parece que ya tienes lo que querias. Ahora te falta ajustar el css para el autocomplete.

 

Saludos

Vuelve a comentarselo, y dile que te pasa justo en los momentos, en los que realizas las busquedas (por que parece eso... ¿no?)

 

Si un hosting serio, aunque exista la posibilidad de que el problema pueda no ser de ellos, tendran un registro para ver las cosas con detalles..

 

Correcto, pero me acaban de decir que no moleste al comercial. ¿Lo veis normal?

 

PD: La web va como una patada en el culo de lenta

 

PD2: A mi sigue sin salirme nada

Edited by Rubén (see edit history)
Link to comment
Share on other sites

 

EDITO: que esto es con el autocomplete, no puedes meterle el value ya que estará buscando continuamente el royal canin hasta la saciedad y te tira la conección a la bd...

 

Vaya,

 

Entonces todo el problema, ha venido desde hay desde un principio ¿?

Link to comment
Share on other sites

Recapitulemos:

 

Cada vez que uso búsqueda predictiva (como está ahora) la web se realentiza, y en algunas ocasiones pierde la conexión con la BD.

 

Cuando pongo una búsqueda normal, la web vuelve a estar fluida y rápida.

 

Cada vez que toco el código blocktopmenu.php me pasa lo de la web.

 

Para mi que el error está en la BD o en código PHP (ya que está sobreescribiendo)

 

PD: Incluso pierdo el acceso a plesk

Edited by Rubén (see edit history)
Link to comment
Share on other sites

Acabo de añadir la carpeta blocksearch original a mi ftp y parece más rápida (la página)

 

Antes de borrar un modulo de la carpeta hay que desinstalarlo... si no queda en la bd como instaldo.

 

Otra cosa que veo que se mete para descargar las imagenes 1 segundo más o menos por cada una

 

Antes no era así, ha sido desde la instalación.

 

PD: Voy a ver lo del block search

Link to comment
Share on other sites

Vale, parece que sigue igual

 

PD: Creo que hace peticiones infinitas a la BD:

 

Link to database cannot be established: SQLSTATE[42000] [1203] User excellencedogs already has more than 'max_user_connections' active connections

Link to comment
Share on other sites

Vale, parece que sigue igual

 

PD: Creo que hace peticiones infinitas a la BD:

 

Link to database cannot be established: SQLSTATE[42000] [1203] User excellencedogs already has more than 'max_user_connections' active connections

 

¿Por cierto, restaurastes el Search.php original, que cambiastes al inicio del tema? (Lo digo, por que no sea que eso este armando el follon..)

Link to comment
Share on other sites

¿Por cierto, restaurastes el Search.php original, que cambiastes al inicio del tema? (Lo digo, por que no sea que eso este armando el follon..)

 

Si, lo restauré, ¿quieres que vuelva a hacerlo por si las moscas?

Link to comment
Share on other sites

Okis, otra cosa... has perdido el supersubs en el menu. Cuando lo añadas haslo en el superfish-modified.js que está en la carpeta js del módulo... verás al final:

jQuery(function(){
jQuery('ul.sf-menu').superfish();
});

 

Añadelo en el...

 

¿Como como? No acabo de entender, meto ese código al js?

Link to comment
Share on other sites

No creo que se por eso chicos, el override de la clase Search tan solo se diferencia en la función que he añadido el un left join para que de el id de la imagen...

 

A ver, pienso que debe ser de la función en si, statictic, podemos comparar archivos para ver por qué a ti te funciona y por qué a mi no?

Link to comment
Share on other sites

He instaldo un presta 1.5.4.1 en local y he hecho los cambios al blocktopmenu tal y como he posteado, y no tengo ese problema. Claro está solo hay 5 productos.

 

Pero no creo que venga por hay el tema...

 

No tendré las tablas rotas?

 

PD: Repito, si quieres acceso FTP sin ningún problema

 

PD2: Espera, razonando un poco cuando hace la predicción tiene que buscar los archivos de golpe, no será eso? quito la opción de predicción?

Edited by Rubén (see edit history)
Link to comment
Share on other sites

Buenas Rubén, creo que puedes dar este hilo por solucionado... ya el aporte está presentado.

 

Saludos

 

Ok, lamentablemente no puedo usarlo (una pena, me hubiese encantado)

 

El problema ahora son los precios, menuda basura el tema default de prestashop

Link to comment
Share on other sites

Por cierto, ¿podrias decir quien es tu provehedor de hosting?

 

Saludos

 

La empresa donde ha contratado el hosting, es profesionalhosting (creo haberlo leído por el foro que es hay donde Ruben, habia contratado el hosting..)

 

De todos modos, esperemos a ver si hay mas detalles.

Link to comment
Share on other sites

Okis, eso me llevo a confución y por lo que veo a otros tambien.

 

Por cierto, ¿has tomado en concideración de dar este tema como solucionado?. Te lo habia sugerio más arriba, pero no sé si lo llegastes a leer con tanto lio...

 

Saludos

 

Pues no lo habia leido, lo marco compañero

Link to comment
Share on other sites

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