Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Mi ULTIMO aporte: menu horizontal

Estas en el tema de Mi ULTIMO aporte: menu horizontal en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Bueno...debido a el poco interes / valoracion negativa de mi URL HELPER...este sera casi seguro mi ultimo aporte...a FDW Es una clase para crear facilmente ...
  #1 (permalink)  
Antiguo 17/07/2011, 09:02
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Mi ULTIMO aporte: menu horizontal

Bueno...debido a el poco interes / valoracion negativa de mi URL HELPER...este sera casi seguro mi ultimo aporte...a FDW

Es una clase para crear facilmente un menu horizontal como este:



Código PHP:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
Uso:

  $this->main_menu->add('cpanel/admin','Admin');
  $this->main_menu->add('cpanel/advertiser','Anunciante');
  $this->main_menu->add('cpanel/blogger','Blogger',true);
  echo $this->main_menu->generate();  
*/    
Class Main_menu {

  private 
$items = array();
  
  public function 
add ($uri,$anchor,$on=false){
    
$on = ($on==true) ? 'on' 'ge';
    
$this->items[] = "<li class=\"$on\" ><a href=\"$uri\">$anchor</a></li>";    
  }
  
  public function 
generate(){
    
$out  '<div id="tabmenu"><ul><li class="tm_begin"></li>';    
    foreach (
$this->items as $item){
      
$out .= $item;
    }    
    
$out .= '<li class="tm_end"> </li></ul></div>';
    return 
$out;
  }


// end class
CSS:
Cita:
a, a:visited {
text-decoration: none;
color:#058D16
}

a:hover {
text-decoration: underline;
}

#tabmenu {
width: auto;
overflow:hidden;
padding: 7px 0 4px 0;
margin-bottom: 10px;
height: 28px;
margin-left:-20px;
margin-bottom:20px;
}

#tabmenu ul {
list-style:none;
padding:0 10px 0 20px;
margin:0px;
}

#tabmenu li {
float:left;
text-align:center;
display:block;
padding: 0;
font-size:150%;
}

#tabmenu li a,#tabmenu li a:visited {
display:block;
padding: 4px 15px 6px 15px;
border: #BEBEBE 1px solid;
border-width: 1px 0 0 1px;
}

#tabmenu li.ge a,#tabmenu li.ge a:visited {
background: url("tab_bg.gif") repeat-x;
color: #666;
}

#tabmenu li.ge a:hover {
background: #E6E6E6;
text-decoration: none;
}

#tabmenu li.on {
overflow: hidden;
}

#tabmenu li.on a,#tabmenu li.on a:visited {
font-weight: bold;
text-decoration: none;
background: none;
}

#tabmenu li.on a:hover {
background: none;
}

#tabmenu li.tm_begin {
height: 24px;
width: 10px;
border-bottom: #BEBEBE 1px solid;
}

#tabmenu li.tm_end {
height: 24px;
width: 27px;
border-left: #ccc 1px solid;
border-bottom: #ccc 1px solid;
}



#tabmenu li.tm_register a{
background: #DDDDDD;
}
__________________
Salu2!
  #2 (permalink)  
Antiguo 17/07/2011, 09:45
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Mi ULTIMO aporte: menu horizontal

SIGO AGRADECIENDO los VOTOS NEGATIVOS! gracias IsaBelM

Código PHP:
<?php

Class Css_menu {
  private 
$items = array();
  
  private 
$startCode,$endCode;
  private 
$liOnCssClass=null;
  private 
$liOffCssClass=null;
  private 
$liDefaultCssClass=null;
  private 
$aOnCssClass=null;
  private 
$aOffCssClass=null;
  private 
$aDefaultCssClass=null;
  
  public function 
add ($uri,$anchor,$on=null){
    
$on_a  null;
    
$on_li null;
  
    if (
$on==true){
      if (
$this->liOnCssClass!=null){
        
$on_li $this->liOnCssClass;
      }    
      if (
$this->aOnCssClass!=null){
        
$on_a $this->aOnCssClass;
      }    
    }else{
      if (
$on==false){
        if (
$this->liOffCssClass!=null){
          
$on_li $this->liOffCssClass;
        }    
        if (
$this->aOffCssClass!=null){
          
$on_a $this->aOffCssClass;
        }    
      }else{
        
// ==null
        
if ($this->liDefaultCssClass!=null){
          
$on_li $this->liDefaultCssClass;
        }    
        if (
$this->aDefaultCssClass!=null){
          
$on_a $this->aDefaultCssClass;
        }            
      }
    }  
      
    
$this->items[] = array($uri,$anchor,$on_li,$on_a);    
  }
  
  public function 
setStartCode($code){
    
$this->startCode $code;    
  }
  
  public function 
setEndCode($code){
    
$this->endCode $code;    
  }
  
  
/* clase css <li> de tab activo */
  
public function setLiOnCssClass($code){
    
$this->liOnCssClass $code;    
  }
  
  
/* clase css <li>  de tab inactivo */
  
public function setLiOffCssClass($code){
    
$this->liOffCssClass $code;    
  }
  
   
/* clase css <li>  de tab por defecto */
  
public function setLiDefaultCssClass($code){
    
$this->liDefaultCssClass $code;    
  }
  
  
  
/* clase css <a> de tab activo */
  
public function setAOnCssClass($code){
    
$this->aOnCssClass $code;    
  }
  
  
/* clase css <a> de tab inactivo */
  
public function setAOffCssClass($code){
    
$this->aOffCssClass $code;    
  }
  
  
/* clase css <a> de tab por defecto */
  
public function setADefaultCssClass($code){
    
$this->aDefaultCssClass $code;    
  }
  
  
  
  
  public function 
render(){
    
$out  $this->startCode;    
    foreach (
$this->items as $item){            
      if (
$item[2]!=null){
        
$li_class "class= \"{$item[2]}\"";
      }else{
        
$li_class='';
      }          
      
      if (
$item[3]!=null){
        
$a_class "class= \"{$item[3]}\"";
      }else{
        
$a_class='';
      }     
            
      
$out .= "<li $li_class ><a $a_class href=\"{$item[0]}\">{$item[1]}</a></li>";
    }    
    
$out .= $this->endCode;
    return 
$out;
  }

  public function 
__tostring(){
    return 
$this->render();
  }
  
// end class

Uso:

Código PHP:
<?php
  $this
->css_menu->setStartCode('<div id="tabmenu"><ul><li class="tm_begin"></li>');
  
$this->css_menu->setEndCode('<li class="tm_end"> </li></ul></div>');
  
$this->css_menu->setLiOnCssClass('on');
  
$this->css_menu->setLiOffCssClass('ge');
  
$this->css_menu->add('#','Inicio',TRUE);
  
$this->css_menu->add('#','Pago x post');
  
$this->css_menu->add('#','F.A.Q.');
  
$this->css_menu->add('#','Contacto');
  echo 
$this->css_menu;
SE que les encanta... criticar y desprestgiar a los colaboradores... bueno ahi tenes... porque "el que hace se equivoca y el que no..se calla la boca"

PD: veran que generalizar hace el codigo UN POCO mas largo (mas alla de que no use __set() )

Última edición por Italico76; 18/07/2011 a las 09:14
  #3 (permalink)  
Antiguo 18/07/2011, 09:16
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Mi ULTIMO aporte: menu horizontal

Caracteristicas:

1) Generalizacion
2) Separacion de codigo CSS / PHP / HTML

Se pueden definir cuales son las clases css a usar para tab activo / inactivo tanto en los tags <li> como <a>
__________________
Salu2!

Última edición por Italico76; 18/07/2011 a las 10:22
  #4 (permalink)  
Antiguo 18/07/2011, 10:53
Avatar de NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 18 años, 5 meses
Puntos: 890
Respuesta: Mi ULTIMO aporte: menu horizontal

Cita:
Iniciado por Italico76 Ver Mensaje
SE que les encanta... criticar y desprestgiar a los colaboradores... bueno ahi tenes... porque "el que hace se equivoca y el que no..se calla la boca"
Podrias tranquilzarte un poco?, tus quejas y lloriqueos ya caen en un tono odioso, no pretendas que todo lo que hagas le guste a todos.
No lo tomes personal. Tranquilo, sigue con tus aportes que están bien, pero antes de hacerlo piensa que no a todos les va a gustar o servir. Personalmente veo que has mejorado mucho. :)

Saludos.
__________________
Drupal Argentina
  #5 (permalink)  
Antiguo 18/07/2011, 22:02
Avatar de pablofmorales  
Fecha de Ingreso: abril-2008
Ubicación: Buenos Aires, Argentina, Argentina
Mensajes: 222
Antigüedad: 16 años
Puntos: 37
Respuesta: Mi ULTIMO aporte: menu horizontal

Trata de que el html este solo en las vistas y no en las clases como veo que tenes


Código PHP:
Ver original
  1. public function render(){
  2.     $out  = $this->startCode;    
  3.     foreach ($this->items as $item){            
  4.       if ($item[2]!=null){
  5.         $li_class = "class= \"{$item[2]}\"";
  6.       }else{
  7.         $li_class='';
  8.       }          
  9.        
  10.       if ($item[3]!=null){
  11.         $a_class = "class= \"{$item[3]}\"";
  12.       }else{
  13.         $a_class='';
  14.       }      
  15.              
  16.       $out .= "<li $li_class ><a $a_class href=\"{$item[0]}\">{$item[1]}</a></li>";
  17.     }    
  18.     $out .= $this->endCode;
  19.     return $out;
  20.   }
__________________
blog
  #6 (permalink)  
Antiguo 18/07/2011, 22:21
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Mi ULTIMO aporte: menu horizontal

Cita:
Iniciado por pablofmorales Ver Mensaje
Trata de que el html este solo en las vistas y no en las clases como veo que tenes
Mostrame como re-harias esta clase para que sea generica, configurable como es y tenga CERO html (!)

Si te tomastes el trabajo de leerla veras que se hizo el esfuerzo de sacar todo lo que se pudo de html afuera.

Aporta algo mas que criticas (si es que califican para tanto)
__________________
Salu2!
  #7 (permalink)  
Antiguo 18/07/2011, 22:30
Avatar de pablofmorales  
Fecha de Ingreso: abril-2008
Ubicación: Buenos Aires, Argentina, Argentina
Mensajes: 222
Antigüedad: 16 años
Puntos: 37
Respuesta: Mi ULTIMO aporte: menu horizontal

Te tiro una data, y te calentas, no opinan y te calentas, te votan negativo y te calentas.

1- Lo que aportaste no se entiende nada y es obvio que es para codeigniter, asi que deberias etiquetarlo, o explicar que es para code igniter

2- EN otros foros te llevarias una sancion por hacer doble post (aca son triple post)

3- Hay 800 ejemplos en google de esto, no esperes que el tuyo despierte pasiones.

4- No te puedo tocar el codigo para sacar el html, de tus clases, porque yo lo haria completamente distinto a lo que vos hiciste. Pero sin lugar a dudas no usaria html en mis clases.
__________________
blog
  #8 (permalink)  
Antiguo 18/07/2011, 22:38
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Mi ULTIMO aporte: menu horizontal

Voy a ser... breve .....

Cita:
Iniciado por pablofmorales Ver Mensaje
Lo que aportaste no se entiende nada y es obvio que es para codeigniter, asi que deberias etiquetarlo, o explicar que es para code igniter
NOP, no es para CI... si leyeras ANTES de decir lo primero que se te viene a la mente... lo sabrias

Cita:
Iniciado por pablofmorales Ver Mensaje
No te puedo tocar el codigo para sacar el html, de tus clases, porque yo lo haria completamente distinto a lo que vos hiciste. Pero sin lugar a dudas no usaria html en mis clases.
Que buena excusa! es fenomenal! Felicitaciones!

El codigo no tiene HTML sino que lo GENERA.... .. segui participando
__________________
Salu2!
  #9 (permalink)  
Antiguo 18/07/2011, 22:40
Avatar de pablofmorales  
Fecha de Ingreso: abril-2008
Ubicación: Buenos Aires, Argentina, Argentina
Mensajes: 222
Antigüedad: 16 años
Puntos: 37
Respuesta: Mi ULTIMO aporte: menu horizontal

Bueno tenes razon, te dejo porque mi vieja me dijo una vez

"Don't feed the troll pablito"

Y a la vieja hay que hacerle caso
__________________
blog
  #10 (permalink)  
Antiguo 19/07/2011, 05:22
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Mi ULTIMO aporte: menu horizontal

@Italico76, no comprendo tu actitud, cuando alguien comparte su trabajo esta expuesto a criticas y si no estas dispuesto a tolerarlas, no deberias compartir.

@pablofmorales, incluso Zend en sus view helpers genera un mínimo de html en la clase, en algo tan simple, esas pocas lineas de html para mi son aceptables, aunque seria algo interesante poder setear partials para tener un control absoluto sobre el html generado.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #11 (permalink)  
Antiguo 19/07/2011, 06:22
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Mi ULTIMO aporte: menu horizontal

Cita:
Iniciado por masterpuppet Ver Mensaje
seria algo interesante poder setear partials para tener un control absoluto sobre el html generado.|
master......como estas ?

Me gustaria saber como aplico el concepto de partials en esta clase. Muchas gracias!
__________________
Salu2!

Última edición por Italico76; 19/07/2011 a las 07:19
  #12 (permalink)  
Antiguo 19/07/2011, 07:40
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Mi ULTIMO aporte: menu horizontal

El concepto de Partials, en el caso que explica masterpuppet es usando Zend_View como componente intermedio para generar HTML desde una plantilla.

Y sí, como bien dice masterpuppet, inclusive los view helpers de Zend generan HTML, y herramientas como el Zend_Tool lo hacen para hacer más fácil el trabajo del programador.

Saludos.
  #13 (permalink)  
Antiguo 19/07/2011, 07:44
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Mi ULTIMO aporte: menu horizontal

GatorV: nuevamente gracias por tus explicaciones

masterpuppet
__________________
Salu2!

Etiquetas: horizontal, php, ultimo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 8 personas




La zona horaria es GMT -6. Ahora son las 23:45.