Jump to content

Programacion en los Breadcrumbs... Ayuda


el_gota

Recommended Posts

Hola, explico es una duda de desconocimiento de donde se encuentran los archivos... Explico lo que quiero hacer en mi template...

 

Estoy en el archivo Breadcrumbs.tpl de mi Theme...

<!-- Breadcrumb -->

{if isset($smarty.capture.path)}{assign var='path' value=$smarty.capture.path}{/if}

<div class="breadcrumb">

<div class="breadcrumb_inner">

<a href="{$base_dir}" title="{l s='return to'} {l s='Home'}">{l s='Home'}</a>{if isset($path) AND $path}<span class="navigation-pipe">{$navigationPipe|escape:html:'UTF-8'}</span>{if !$path|strpos:'span'}<span class="navigation_page">{$path}</span>{else}{$path}{/if}{/if}

</div>

</div>

<!-- /Breadcrumb -->

 

Visualmente en mi theme yo veo esto... INICIO > BICICLETAS > ACCESORIOS > MANILLAR X3D

 

INICIO lo pinta ---> <a href="{$base_dir}" title="{l s='return to'} {l s='Home'}">{l s='Home'}</a>

El simbolo > ---> {if isset($path) AND $path}<span class="navigation-pipe">{$navigationPipe|escape:html:'UTF-8'}</span>

Pero el resto de la ruta... BICICLETAS > ACCESORIOS > MANILLAR X3D lo pinta la variable $path

 

Dicho esto... necesito colocar un codigo dentro del enlace de BICICLETAS, otro dentro de ACCESORIOS... es decir necesito modificar el <a> de las subcategorias y nose donde poder modificar eso... pienso que la clave es saber donde se inicializa la variable $path pero... es en lo que necesito ayuda... lo desconozco.

 

Gracias y espero lo podais entenderlo

 

:)

Link to comment
Share on other sites

Hola, explico es una duda de desconocimiento de donde se encuentran los archivos... Explico lo que quiero hacer en mi template...

 

Estoy en el archivo Breadcrumbs.tpl de mi Theme...

 

 

Visualmente en mi theme yo veo esto... INICIO > BICICLETAS > ACCESORIOS > MANILLAR X3D

 

INICIO lo pinta ---> <a href="{$base_dir}" title="{l s='return to'} {l s='Home'}">{l s='Home'}</a>

El simbolo > ---> {if isset($path) AND $path}<span class="navigation-pipe">{$navigationPipe|escape:html:'UTF-8'}</span>

Pero el resto de la ruta... BICICLETAS > ACCESORIOS > MANILLAR X3D lo pinta la variable $path

 

Dicho esto... necesito colocar un codigo dentro del enlace de BICICLETAS, otro dentro de ACCESORIOS... es decir necesito modificar el <a> de las subcategorias y nose donde poder modificar eso... pienso que la clave es saber donde se inicializa la variable $path pero... es en lo que necesito ayuda... lo desconozco.

 

Gracias y espero lo podais entenderlo

 

:)

Se supone, que la carga es generica, como vas a ponerle un enlace distinto?

Que tipo de enlace quieres ponerle?

Link to comment
Share on other sites

Quiero poner un codigo... por ejemplo, imaginate que quisiera poner target="_blank" en los enlaces de BICICLETAS > ACCESORIOS > MANILLAR X3D...

 

Sabes donde se puede hacer???

El Breadcrumb se obtiene del archivo Tools.php que esta en "/public_html/classes" sale un vistazo haber si puedes lograr lo que necesitas, saludos.

Link to comment
Share on other sites

Al modificarlo me ha petado como os he dicho y he visto esto en el log...

[Fri Feb 10 16:41:32 2012] [warn] mod_fcgid: stderr: PHP Fatal error: Call to undefined method Tools::usingSecureMode() in /usr/home/xxxx/www/classes/FrontController.php on line 217

 

Y las lineas en cuestion si que hablan del BREADCRUMB... Exactamente la linea implicada es la que marco en negrita...

 

/* Breadcrumb */

$navigationPipe = (Configuration::get('PS_NAVIGATION_PIPE') ? Configuration::get('PS_NAVIGATION_PIPE') : '>');

$smarty->assign('navigationPipe', $navigationPipe);

 

$protocol_link = (Configuration::get('PS_SSL_ENABLED') OR Tools::usingSecureMode()) ? 'https://' : 'http://';

 

Se os ocurre que puede estar pasando???

Link to comment
Share on other sites

Al modificarlo me ha petado como os he dicho y he visto esto en el log...

 

 

Y las lineas en cuestion si que hablan del BREADCRUMB... Exactamente la linea implicada es la que marco en negrita...

 

/* Breadcrumb */

$navigationPipe = (Configuration::get('PS_NAVIGATION_PIPE') ? Configuration::get('PS_NAVIGATION_PIPE') : '>');

$smarty->assign('navigationPipe', $navigationPipe);

 

$protocol_link = (Configuration::get('PS_SSL_ENABLED') OR Tools::usingSecureMode()) ? 'https://' : 'http://';

 

Se os ocurre que puede estar pasando???

Error.... eso no tiene nada que ver con lo que ibas hacer, la función implicada es esta:

public static function getPath($id_category, $path = '', $linkOntheLastItem = false, $categoryType = 'products')
{
 global $link, $cookie;
 if ($id_category == 1)
  return '<span class="navigation_end">'.$path.'</span>';
 $pipe = Configuration::get('PS_NAVIGATION_PIPE');
 if (empty($pipe))
  $pipe = '>';
 $fullPath = '';
 if ($categoryType === 'products')
 {
  $category = Db::getInstance()->getRow('
  SELECT id_category, level_depth, nleft, nright
  FROM '._DB_PREFIX_.'category
  WHERE id_category = '.(int)$id_category);
  if (isset($category['id_category']))
  {
$categories = Db::getInstance()->ExecuteS('
SELECT c.id_category, cl.name, cl.link_rewrite
FROM '._DB_PREFIX_.'category c
LEFT JOIN '._DB_PREFIX_.'category_lang cl ON (cl.id_category = c.id_category)
WHERE c.nleft <= '.(int)$category['nleft'].' AND c.nright >= '.(int)$category['nright'].' AND cl.id_lang = '.(int)($cookie->id_lang).' AND c.id_category != 1
ORDER BY c.level_depth ASC
LIMIT '.(int)$category['level_depth']);
$n = 1;
$nCategories = (int)sizeof($categories);
foreach ($categories AS $category)
{
 $fullPath .=
 (($n < $nCategories OR $linkOntheLastItem) ? '<a href="'.self::safeOutput($link->getCategoryLink((int)$category['id_category'], $category['link_rewrite'])).'" title="'.htmlentities($category['name'], ENT_NOQUOTES, 'UTF-8').'">' : '').
 htmlentities($category['name'], ENT_NOQUOTES, 'UTF-8').
 (($n < $nCategories OR $linkOntheLastItem) ? '</a>' : '').
 (($n++ != $nCategories OR !empty($path)) ? '<span class="navigation-pipe">'.$pipe.'</span>' : '');
}
return $fullPath.$path;
  }
 }
 elseif ($categoryType === 'CMS')
 {
  $category = new CMSCategory((int)($id_category), (int)($cookie->id_lang));
  if (!Validate::isLoadedObject($category))
die(self::displayError());
  $categoryLink = $link->getCMSCategoryLink($category);
  if ($path != $category->name)
$fullPath .= '<a href="'.self::safeOutput($categoryLink).'">'.htmlentities($category->name, ENT_NOQUOTES, 'UTF-8').'</a><span class="navigation-pipe">'.$pipe.'</span>'.$path;
  else
$fullPath = ($linkOntheLastItem ? '<a href="'.self::safeOutput($categoryLink).'">' : '').htmlentities($path, ENT_NOQUOTES, 'UTF-8').($linkOntheLastItem ? '</a>' : '');
  return self::getPath((int)($category->id_parent), $fullPath, $linkOntheLastItem, $categoryType);
 }
}

Link to comment
Share on other sites

Error.... eso no tiene nada que ver con lo que ibas hacer, la función implicada es esta:

public static function getPath($id_category, $path = '', $linkOntheLastItem = false, $categoryType = 'products')
{
 global $link, $cookie;
 if ($id_category == 1)
  return '<span class="navigation_end">'.$path.'</span>';
 $pipe = Configuration::get('PS_NAVIGATION_PIPE');
 if (empty($pipe))
  $pipe = '>';
 $fullPath = '';
 if ($categoryType === 'products')
 {
  $category = Db::getInstance()->getRow('
  SELECT id_category, level_depth, nleft, nright
  FROM '._DB_PREFIX_.'category
  WHERE id_category = '.(int)$id_category);
  if (isset($category['id_category']))
  {
$categories = Db::getInstance()->ExecuteS('
SELECT c.id_category, cl.name, cl.link_rewrite
FROM '._DB_PREFIX_.'category c
LEFT JOIN '._DB_PREFIX_.'category_lang cl ON (cl.id_category = c.id_category)
WHERE c.nleft <= '.(int)$category['nleft'].' AND c.nright >= '.(int)$category['nright'].' AND cl.id_lang = '.(int)($cookie->id_lang).' AND c.id_category != 1
ORDER BY c.level_depth ASC
LIMIT '.(int)$category['level_depth']);
$n = 1;
$nCategories = (int)sizeof($categories);
foreach ($categories AS $category)
{
 $fullPath .=
 (($n < $nCategories OR $linkOntheLastItem) ? '<a href="'.self::safeOutput($link->getCategoryLink((int)$category['id_category'], $category['link_rewrite'])).'" title="'.htmlentities($category['name'], ENT_NOQUOTES, 'UTF-8').'">' : '').
 htmlentities($category['name'], ENT_NOQUOTES, 'UTF-8').
 (($n < $nCategories OR $linkOntheLastItem) ? '</a>' : '').
 (($n++ != $nCategories OR !empty($path)) ? '<span class="navigation-pipe">'.$pipe.'</span>' : '');
}
return $fullPath.$path;
  }
 }
 elseif ($categoryType === 'CMS')
 {
  $category = new CMSCategory((int)($id_category), (int)($cookie->id_lang));
  if (!Validate::isLoadedObject($category))
die(self::displayError());
  $categoryLink = $link->getCMSCategoryLink($category);
  if ($path != $category->name)
$fullPath .= '<a href="'.self::safeOutput($categoryLink).'">'.htmlentities($category->name, ENT_NOQUOTES, 'UTF-8').'</a><span class="navigation-pipe">'.$pipe.'</span>'.$path;
  else
$fullPath = ($linkOntheLastItem ? '<a href="'.self::safeOutput($categoryLink).'">' : '').htmlentities($path, ENT_NOQUOTES, 'UTF-8').($linkOntheLastItem ? '</a>' : '');
  return self::getPath((int)($category->id_parent), $fullPath, $linkOntheLastItem, $categoryType);
 }
}

ya, eso pensaba yo... voy ha hablar con el del servidor a ver si hubiera habido algun problema...

Link to comment
Share on other sites

 

$protocol_link = (Configuration::get('PS_SSL_ENABLED') OR Tools::usingSecureMode()) ? 'https://' : 'http://';

 

Se os ocurre que puede estar pasando???

 

 

Perdon nadie, no te he entendido esto ultimo que me has dicho...

Dices que estas modificando lo de protocol_link, pero eso no debes editarlo.

Link to comment
Share on other sites

No, yo estoy tocando en el Tools.php en la function getPath($id_c...

Estas lineas...

 

if ($path != $category_name)

{

$displayedPath = '';

if ($category->active)

$displayedPath .= '<a href="'.self::safeOutput($link->getCategoryLink($category)).'">';

$displayedPath .= htmlentities($category_name, ENT_NOQUOTES, 'UTF-8');

if ($category->active)

$displayedPath .= '</a>';

$displayedPath .= '<span class="navigation-pipe">'.$pipe.'</span>'.$path;

}

 

Por estas...

 

// htmlentitiezed because this method generates some view

if ($path != $category_name)

{

$displayedPath = '';

if ($category->active)

$displayedPath .= '<span><a rel="nofollow" target="_blank" href="'.self::safeOutput($link->getCategoryLink($category)).'">';

$displayedPath .= htmlentities($category_name, ENT_NOQUOTES, 'UTF-8');

if ($category->active)

$displayedPath .= '</a></span>';

$displayedPath .= '<span class="navigation-pipe">'.$pipe.'</span>'.$path;

}

 

 

 

He marcado en negrita lo que he añadido... y haciendo eso... me ha pasado lo que te he comentado en el servidor... eso es normal???

 

Disculpa pero creo que no nos hemos entendido en la explicacion de antes...

 

Un saludo

Link to comment
Share on other sites

No, yo estoy tocando en el Tools.php en la function getPath($id_c...

Estas lineas...

 

 

 

Por estas...

 

 

 

He marcado en negrita lo que he añadido... y haciendo eso... me ha pasado lo que te he comentado en el servidor... eso es normal???

 

Disculpa pero creo que no nos hemos entendido en la explicacion de antes...

 

Un saludo

¿Que error te da en el servidor?

Link to comment
Share on other sites

[Fri Feb 10 16:41:32 2012] [warn] mod_fcgid: stderr: PHP Fatal error: Call to undefined method Tools::usingSecureMode() in /usr/home/xxxx/www/classes/FrontController.php on line 217

Yo cuando abro classes/tools.php, y busco esa función veo esto:

public static function getPath($id_category, $path = '', $linkOntheLastItem = false, $categoryType = 'products')
{
 global $link, $cookie;
 if ($id_category == 1)
  return '<span class="navigation_end">'.$path.'</span>';
 $pipe = Configuration::get('PS_NAVIGATION_PIPE');
 if (empty($pipe))
  $pipe = '>';
 $fullPath = '';
 if ($categoryType === 'products')
 {
  $category = Db::getInstance()->getRow('
  SELECT id_category, level_depth, nleft, nright
  FROM '._DB_PREFIX_.'category
  WHERE id_category = '.(int)$id_category);
  if (isset($category['id_category']))
  {
$categories = Db::getInstance()->ExecuteS('
SELECT c.id_category, cl.name, cl.link_rewrite
FROM '._DB_PREFIX_.'category c
LEFT JOIN '._DB_PREFIX_.'category_lang cl ON (cl.id_category = c.id_category)
WHERE c.nleft <= '.(int)$category['nleft'].' AND c.nright >= '.(int)$category['nright'].' AND cl.id_lang = '.(int)($cookie->id_lang).' AND c.id_category != 1
ORDER BY c.level_depth ASC
LIMIT '.(int)$category['level_depth']);
$n = 1;
$nCategories = (int)sizeof($categories);
foreach ($categories AS $category)
{
 $fullPath .=
 (($n < $nCategories OR $linkOntheLastItem) ? '<a href="'.self::safeOutput($link->getCategoryLink((int)$category['id_category'], $category['link_rewrite'])).'" title="'.htmlentities($category['name'], ENT_NOQUOTES, 'UTF-8').'">' : '').
 htmlentities($category['name'], ENT_NOQUOTES, 'UTF-8').
 (($n < $nCategories OR $linkOntheLastItem) ? '</a>' : '').
 (($n++ != $nCategories OR !empty($path)) ? '<span class="navigation-pipe">'.$pipe.'</span>' : '');
}
return $fullPath.$path;
  }
 }
 elseif ($categoryType === 'CMS')
 {
  $category = new CMSCategory((int)($id_category), (int)($cookie->id_lang));
  if (!Validate::isLoadedObject($category))
die(self::displayError());
  $categoryLink = $link->getCMSCategoryLink($category);
  if ($path != $category->name)
$fullPath .= '<a href="'.self::safeOutput($categoryLink).'">'.htmlentities($category->name, ENT_NOQUOTES, 'UTF-8').'</a><span class="navigation-pipe">'.$pipe.'</span>'.$path;
  else
$fullPath = ($linkOntheLastItem ? '<a href="'.self::safeOutput($categoryLink).'">' : '').htmlentities($path, ENT_NOQUOTES, 'UTF-8').($linkOntheLastItem ? '</a>' : '');
  return self::getPath((int)($category->id_parent), $fullPath, $linkOntheLastItem, $categoryType);
 }
}

 

Y si lo dejo de la siguiente manera, se me abren los enlaces de las categorias, en una nueva ventana.

 

public static function getPath($id_category, $path = '', $linkOntheLastItem = false, $categoryType = 'products')
{
 global $link, $cookie;
 if ($id_category == 1)
  return '<span class="navigation_end">'.$path.'</span>';
 $pipe = Configuration::get('PS_NAVIGATION_PIPE');
 if (empty($pipe))
  $pipe = '>';
 $fullPath = '';
 if ($categoryType === 'products')
 {
  $category = Db::getInstance()->getRow('
  SELECT id_category, level_depth, nleft, nright
  FROM '._DB_PREFIX_.'category
  WHERE id_category = '.(int)$id_category);
  if (isset($category['id_category']))
  {
$categories = Db::getInstance()->ExecuteS('
SELECT c.id_category, cl.name, cl.link_rewrite
FROM '._DB_PREFIX_.'category c
LEFT JOIN '._DB_PREFIX_.'category_lang cl ON (cl.id_category = c.id_category)
WHERE c.nleft <= '.(int)$category['nleft'].' AND c.nright >= '.(int)$category['nright'].' AND cl.id_lang = '.(int)($cookie->id_lang).' AND c.id_category != 1
ORDER BY c.level_depth ASC
LIMIT '.(int)$category['level_depth']);
$n = 1;
$nCategories = (int)sizeof($categories);
foreach ($categories AS $category)
{
 $fullPath .=
 (($n < $nCategories OR $linkOntheLastItem) ? '<a target="blank" href="'.self::safeOutput($link->getCategoryLink((int)$category['id_category'], $category['link_rewrite'])).'" title="'.htmlentities($category['name'], ENT_NOQUOTES, 'UTF-8').'">' : '').
 htmlentities($category['name'], ENT_NOQUOTES, 'UTF-8').
 (($n < $nCategories OR $linkOntheLastItem) ? '</a>' : '').
 (($n++ != $nCategories OR !empty($path)) ? '<span class="navigation-pipe">'.$pipe.'</span>' : '');
}
return $fullPath.$path;
  }
 }
 elseif ($categoryType === 'CMS')
 {
  $category = new CMSCategory((int)($id_category), (int)($cookie->id_lang));
  if (!Validate::isLoadedObject($category))
die(self::displayError());
  $categoryLink = $link->getCMSCategoryLink($category);
  if ($path != $category->name)
$fullPath .= '<a href="'.self::safeOutput($categoryLink).'">'.htmlentities($category->name, ENT_NOQUOTES, 'UTF-8').'</a><span class="navigation-pipe">'.$pipe.'</span>'.$path;
  else
$fullPath = ($linkOntheLastItem ? '<a href="'.self::safeOutput($categoryLink).'">' : '').htmlentities($path, ENT_NOQUOTES, 'UTF-8').($linkOntheLastItem ? '</a>' : '');
  return self::getPath((int)($category->id_parent), $fullPath, $linkOntheLastItem, $categoryType);
 }
}

Link to comment
Share on other sites

Eiii Hola perdona pero voy liadisimo... pues lo he probado y ahora si que me iba... como te comente supongo que el servidor no pudo mas conmigo y me mando a paseo jejejjeje

 

Ahora lo que estoy intentando que me he fijado es que en los BREADCRUMBS si te fijas la ultima opcion, es decir la categoria actual de donde nos encontramos NO ES ENLACE y quiero hacerla enlace... estoy mirando y no localizo donde es... eso tambien es un cambio en el Tools.php???

 

Ejemplo: Si entro en el producto Manillar 25cm Casual...

 

Esto son las MIGAS DE PAN: BICICLETAS > ACCESORIOS > MANILLAR X3D

 

MANILLAR 3D no es enlace y quiero que sea como el resto...

 

Muchas Gracias poco a poco voy entendiendo mas el asunto prestaS.... jejejjej

Link to comment
Share on other sites

  • 2 months later...

Eiii Hola perdona pero voy liadisimo... pues lo he probado y ahora si que me iba... como te comente supongo que el servidor no pudo mas conmigo y me mando a paseo jejejjeje

 

Ahora lo que estoy intentando que me he fijado es que en los BREADCRUMBS si te fijas la ultima opcion, es decir la categoria actual de donde nos encontramos NO ES ENLACE y quiero hacerla enlace... estoy mirando y no localizo donde es... eso tambien es un cambio en el Tools.php???

 

Ejemplo: Si entro en el producto Manillar 25cm Casual...

 

Esto son las MIGAS DE PAN: BICICLETAS > ACCESORIOS > MANILLAR X3D

 

MANILLAR 3D no es enlace y quiero que sea como el resto...

 

Muchas Gracias poco a poco voy entendiendo mas el asunto prestaS.... jejejjej

 

En Tools.php hay un booleano ($linkOntheLastItem), en la linea 814 que te permite hacer lo que quieres. Lo he probado y me funciona cuando estoy en categorías y/o subcategorías, pero no en producto. No te puedo decir más, pero la solución debe estar en esas lineas.

 

Por otro lado tengo una pregunta:

¿Nadie sabe cómo hacer que te muestre siempre todo el recorrido completo en el breadcrumb? Cuando desde la home voy a un producto, veo sólo el producto (Wolf), sin pasar por las categorías/subcategorías; en cambio si voy paso a paso, pasando por las categorías, luego a la subcategoría y luego selecciono un producto, sí que me funciona (Foresta -> Hombre -> Wolf). Una vez ahí, si selecciono un producto similar del modulo de "productos de la misma categoría", me vuelve a desaparecer el "full path".

Link to comment
Share on other sites

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