Cum să creezi un meniu dropdown precum cel din tema Twenty Eleven?

14 sept. 2011, 15:46:31
Vizualizări: 21.4K
Voturi: 3

Îmi place foarte mult soluția de meniu dropdown din tema twenty eleven:

http://twentyelevendemo.wordpress.com/

și aș dori să creez unul similar, dar nu îmi dau seama cum funcționează, sau dacă se bazează pe vreun cod existent pentru meniuri dropdown?

Există vreun cod sursă care poate fi folosit, sau poate cineva să explice principiul din spatele lui?

Știu că internetul este plin de soluții atât cu JavaScript cât și fără, am făcut chiar și eu câteva, dar în opinia mea nimic nu se compară cu acest meniu, așa că orice ajutor este apreciat :)

2
Comentarii

poți accesa codul descărcând Twenty Eleven http://wordpress.org/extend/themes/twentyeleven

Michael Michael
14 sept. 2011 15:56:53

Comentariu excelent, și asta este de fapt primul lucru pe care l-am făcut, dar totul era prea haotic pentru a înțelege, chiar dacă am încercat.

CodeVirtuoso CodeVirtuoso
14 sept. 2011 16:48:10
Toate răspunsurile la întrebare 2
3

Iată un fragment rapid pe care îl folosesc pentru a începe proiectele mele:

Primul pas este să adăugați niște cod în fișierul functions.php. Acesta va activa Navigația Personalizată WordPress. Controalele vor fi în Aspect>Meniuri după ce terminați. Cod pentru functions.php:

<?php
add_action( 'init', 'register_my_menus' );
function register_my_menus() {
register_nav_menus(
array(
    'main' => __( 'main' ),
    'secondary-menu' => __( 'Secondary Menu' ),
    ));
}
?>

Codul de mai sus permite două meniuri. Vă voi arăta cum să adăugați unul, iar dacă doriți, puteți folosi aceeași metodă pentru a adăuga un al doilea oriunde doriți.

Următorul pas este să adăugați codul în fișierul header.php. Observați că primul meniu din matrice este etichetat ca main. Acesta este ceea ce vom folosi pentru a plasa meniul în header.php.

Iată codul pentru header.php:

<div id="menu" class="menu-center">
    <?php wp_nav_menu( array( 'theme_location' => 'main' ) ); ?>
</div>

Acesta ar trebui plasat în interiorul div-ului <div id="header"> (nu este obligatoriu, dar este locul cel mai comun pentru acest cod).

Ultimul pas este să adăugați niște CSS pentru a stiliza meniul și a-l face efectiv "drop-down", în loc de o grămadă de linkuri pe mai multe niveluri.

Codul CSS:

ul.menu,ul.menu ul,ul.menu li,ul.menu a {
display:block;
margin:0;
padding:0;
}

ul.menu ul {
display:none;
}
ul.menu li:hover {
z-index:999;
}
ul.menu li:hover > ul {
display:block;
position:absolute;
float:left;
}
ul.menu li {
float:left;
width:auto;
}
ul.menu ul li {
float:left;
width:190px;
}
ul.menu ul li ul {
float:left;
width:190px;
position:absolute;
left:100%;
top:0;
}
ul.menu-ver,ul.menu-ver ul {
width:14em;
}

div.menu-center ul.menu {
float:left;
position:relative;
left:50%;
}

div.menu-center ul.menu li {
position:relative;
left:-50%;
}

div.menu-center ul.menu li li {
left:auto;
}


ul.menu li a {
border-bottom:1px outset ghostwhite;
}

ul.menu li a {
padding:8px 12px 10px;
}

ul.menu li a:link,ul.menu li a:hover,ul.menu li a:visited,ul.menu li a:active {
text-decoration:none;
border-bottom:1px outset black;
}


ul.menu li {
background: #45484d;
background: -moz-linear-gradient(top, #45484d 0%, #000000 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#45484d), color-stop(100%,#000000));
background: -webkit-linear-gradient(top, #45484d 0%,#000000 100%);
background: -o-linear-gradient(top, #45484d 0%,#000000 100%);
background: -ms-linear-gradient(top, #45484d 0%,#000000 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#45484d', endColorstr='#000000',GradientType=0 );
background: linear-gradient(top, #45484d 0%,#000000 100%);
}
.menu-center {
float:right;
margin-right:95px;
}

ul.menu li a{
color:ghostwhite;
}
ul.menu li a:hover {
background: #efefef;
background: -moz-linear-gradient(top, #efefef 0%, #ffffff 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#efefef), color-stop(100%,#ffffff));
background: -webkit-linear-gradient(top, #efefef 0%,#ffffff 100%);
background: -o-linear-gradient(top, #efefef 0%,#ffffff 100%);
background: -ms-linear-gradient(top, #efefef 0%,#ffffff 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#efefef', endColorstr='#ffffff',GradientType=0 );
background: linear-gradient(top, #efefef 0%,#ffffff 100%);
color:black;
}

Puteți experimenta cu CSS-ul pentru a-l ajusta după preferințe, dar acesta ar trebui să vă ofere un punct de plecare.

Editat pentru compatibilitate cu WordPress 3.3:

După actualizarea la cea mai recentă versiune de WordPress (v3.3), se pare că meniurile nu vor funcționa dacă tema dumneavoastră folosește hook-ul after_setup_theme și utilizați hook-ul 'init' pentru a înregistra meniurile.

Soluția:

Pentru acest exemplu, voi folosi numele yourtheme ca function_name.

Exemplu de fișier functions.php:

<?php
if ( ! isset( $content_width ) )
$content_width = 610;
add_action( 'after_setup_theme', 'yourtheme_setup' );
if ( ! function_exists( 'yourtheme_setup' ) ):
function yourtheme_setup() {
  // Adaugă stiluri pentru editorul vizual (editor-style.css)
  add_editor_style();
  add_theme_support( 'automatic-feed-links' );
  //Înregistrează Meniuri Personalizate
    register_nav_menus(
      array(
        'main' => 'main',
        'secondary' => 'secondary',
        )
      );  
  // Adaugă Post Thumbs și Dimensiuni Personalizate pentru Imagini
  add_theme_support( 'post-thumbnails', array( 'post' ) );
  // Adaugă suport pentru diverse formate de postare
  add_theme_support( 'post-formats', array( 'aside', 'link', 'gallery', 'status', 'quote', 'image' ));
  }
endif; // yourtheme_setup
/**
 * Începe restul codului din fișierul functions.php...
 * 
 */
?>

Uită-te la fișierul functions.php din tema TwentyTen pentru a vedea alte funcții care pot fi incluse în hook-ul after_theme_setup.

14 sept. 2011 16:12:03
Comentarii

Jeremy - Am inserat acel cod în functions, dar nu apare în secțiunea "meniu" de sub aspect. Există un loc specific unde ar trebui să-l lipesc??? Mulțumesc!

User User
16 dec. 2011 22:37:26

Trebuie doar plasat în fișierul functions.php. Asigură-te că tema ta nu folosește 'register_my_menus'. Poți încerca să îl schimbi în 'register_my_custom_menus'. Doar să schimbi ambele instanțe. Tocmai am testat pe o temă din repository care nu avea meniuri personalizate și a funcționat perfect. Câteva întrebări pentru tine: Tema ta curentă folosește deja meniuri personalizate? Este tema ta disponibilă pentru descărcare? O voi verifica dacă este disponibilă și dacă întâmpin probleme.

Jeremy Jared Jeremy Jared
17 dec. 2011 04:13:32

@Megan de la Fiterature: Se pare că a fost o problemă. Din nu știu ce motiv, când am testat pe site-ul meu folosind Instalarea Beta WordPress a funcționat. Tocmai am creat un site nou, am instalat WordPress 3.3. Atunci am observat că meniurile nu erau înregistrate cum ai menționat. Vezi codul de mai sus pentru soluția care a rezolvat problema la mine.

Jeremy Jared Jeremy Jared
17 dec. 2011 21:49:54
1

Tocmai făceam exact asta recent. Nu sunt sigur cât de avansat ești, așa că poate știi deja unele dintre aceste lucruri.

Am găsit acest videoclip foarte util (+ și partea a doua a acestuia)

Cred că una dintre cercetările originale făcute a fost aceasta

Cred că Twenty Eleven folosește și plugin-ul jQuery superfish

După cum a menționat și celălalt utilizator, poți găsi codul Twenty Eleven undeva în fișierele temei

14 sept. 2011 16:06:06
Comentarii

Mulțumesc, superfish s-a dovedit a fi soluția care oferă exact aceeași funcționalitate.

CodeVirtuoso CodeVirtuoso
14 sept. 2011 16:49:10