theming de un menu, id individuales para cada item de menu segun si nombre

Events happening in the community are now at Drupal community events on www.drupal.org.
lepabloski's picture

Amigos drupaleros, tengo el siguiente problema, estoy armando un theme cuyo menú, posee imágenes en lugar de texto, es decir hago un reemplazo del texto por imágenes mediante css, pero esas imagenes son especificas , es decir un par por cada item (sin seleccionar y hober y seleccionado) pero no he encontrado un script que me fucnione, he estado sobreescribiendo una funcion mediante template.php, pero estoy un poco perdido. les dejo que estoy haciendo o utilizando a ver si saben porque no funciona.
(estoy utilizando phptemplate para crear el theme)
esto va en template.php

/**
* override de la funcion theme_menu_item() del theme
* placoss es el nombre del theme*********************/

function placoss_menu_item($link, $has_children, $menu = '', $in_active_trail = FALSE, $extra_class = NULL) {
$class = ($menu ? 'expanded' : ($has_children ? 'collapsed' : 'leaf'));
if (!empty($extra_class)) {
$class .= ' '. $extra_class;
}
if ($in_active_trail) {
$class .= ' active-trail';
}

// agrega un id
static $item_id = 0;
$item_id += 1;
$id .= ' ' . 'menu-item-custom-id-' . $item_id;
// agrega una semi-clase unica
$class .= ' ' . preg_replace("/[^a-zA-Z0-9]/", "", strip_tags($link));

return '

  • '. $link . $menu ."
  • \n";

    }

    y el page.tpl.php
    donde iria:

    <?php
    print theme('links', $primary_links);
    ?>

    lo cambio por:

    <?php
    print theme('menu_item', $primary_links);
    ?>

    lo que ocurre es que en lugar de mostrarme el enlace creado en el menú, me muestra la palabra array, solo crea la clase, pero no la id.

    tengo una idea básica de php, pero esto parece ser mas una falta de conocimiento sobre overrides en profundidad.

    alguna orientación?

    Desde ya muchas gracias por su tiempo.

    Comments

    Podés usar...

    diego_miola's picture

    el siguiente módulo:

    http://drupal.org/project/menu_attributes

    ya sea para solucionar directamente el problema que tenés o para tomarlo de referencia.

    Saludos,

    --
    www.devjaus.com
    "We are helping people to build great web sites based in Drupal CMS"

    gracias

    lepabloski's picture

    lo pruebo inmediatamante, saludos

    alg similar

    maikelm's picture

    Una vez tuve que hacer algo similar, lo que hice fue:

    <?php if (isset($primary_links))
    {
    $c=count($primary_links);
    $claves=array_keys($primary_links);

    for(
    $i=0; $i<$c; $i++)
    {
    $ky=$claves[$i];
    print
    "<div class='primarys'><a href='".$primary_links[$ky]['href']."'>".$primary_links[$ky]['title']."</a></div>";
    }
    }
    ?>

    claro, en este caso a todos les aplico la clase .primarys

    Pero la idea es que con $primary_links[$ky]['href'] me puedo referir al url de un link específico y con $primary_links[$ky]['title'] al título, y así a las demás cosas del arreglo.

    No se si adecuará a tu proyecto, pero es una idea de como manejarlos por separado.

    Por por ejemplo si en vez de class='primarys' hubiese usado id='primarys.$i' tendría un id diferente para cada uno.

    Esta buena la solución....

    diego_miola's picture

    ... lo único que veo como incómodo es el hecho de que tenés que estar cambiando los selectores en CSS en el caso de que tengas que mover los items de menú de lugar o cambiarlos a otro menú.

    Saludos,

    --
    www.devjaus.com
    "We are helping people to build great web sites based in Drupal CMS"

    Seguramente....

    diego_miola's picture

    el problema que ténes es porque no estás definiendo los hipervínculos como bloque (display:block), para despues adaptar su alto y ancho al LI padre.

    Menu Attributes es la mejor solución para tu problema.

    Saludos,

    --
    www.devjaus.com
    "We are helping people to build great web sites based in Drupal CMS"

    Tambien sugiero el modulo

    mariano.barcia's picture

    Tambien sugiero el modulo Menu Attributes, y su uso con sprites CSS.
    Podes ver un claro ejemplo de esto en el sitio www.colaborativa.net, creo que es un caso muy parecido al que estás tratando de resolver.

    1. creas items de menu Primary links
    2. a cada uno le das un id o clase
    3. creas una imagen por cada item, esto es, la imagen del hover y la normal, "pegadas" en una sola imagen (sprite)
    4. estilás con la CSS según la clase/id, diferenciando los pixels de la posición según si es normal o hover (técnica de spriting)

    La técnica de sprite parece complicada pero no lo es en verdad, y evita el parpadeo en el hover. Menu attributes se puede implementar sin sprites también.

    HTH, salud

    gracias a todos

    lepabloski's picture

    sigo teniendo un problema, por mas que tengo ahora una id diferente para cada item, esa id se aplica al enlace y no he podido relizar la sustitucion de imagen por texto en ningun enlace aun. se ve el fondo pero tambien se ve el texto del enlace, cosa no deseada.
    en cuanto a los sprites, lo he usado y la verdad son una gran tecnica.
    si alguien sabe como solucionar el tema de los enlaces que se ven, les ruego asistencia, porque en todos lados aparece la sustitucion referida a encabezados, y eso si funciona, al parecer en el text-indent no funciona con el elemento anchor. saludos.

    gracias a todos

    lepabloski's picture

    gracias a todos me voy encaminando, gracias diego especialemente por ese dato que no tenia en cuenta, claro los encabezados son todos de tipo blocke, que salameeee que soy. saludos . ahora a terminar el maquetado.

    Buena onda ! :) Saludos,

    diego_miola's picture

    Buena onda ! :)

    Saludos,

    --
    www.devjaus.com
    "We are helping people to build great web sites based in Drupal CMS"

    Argentina

    Group organizers

    Group notifications

    This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: