Adăugați pictograme în meniul CMenu Yii

meniu

Există o probabilitate mare ca într-un proiect Yii nou sau vechi să fie nevoie de a face un meniu cu pictograme. Acest lucru poate fi necesar și atunci când așezați un șablon gata făcut. Luați în considerare mai multe soluții și comparați-le între ele în ceea ce privește semantica și puritatea arhitecturală.

Pictogramele pentru elementele de meniu, de exemplu, sunt convenabile de utilizat în panoul de administrare (ca în imaginea pentru această postare).

Utilizarea standard a widget-ului CMenu într-o vizualizare este următoarea:

O serie de articole pentru articole este convenabil de generat în model. Puteți adăuga metoda getMenuList() la modelul Category (care, apropo, poate fi preluat din comportamentul DCategoryBehavior) și afișați meniul „Categorii” folosind pur și simplu această metodă:

Ne abatem puțin la elementele de bază. Luați în considerare modalități de a plasa pictograme în elementele de meniu.

1. Plasarea manuală a unei pictograme ca fundal al unui element

Această metodă implică plasarea unei pictograme în fundalul stilului inline al unui element, care generează cod pentru fiecare articol. Este folosit, de exemplu, aici.

2. Plasarea manuală a etichetei IMG în legendă

Această metodă presupune ca utilizatorul să insereze direct o etichetă pe etichetă pentru a o trece în câmpul de etichetă. Pentru a accepta codul HTML în etichete, dezactivați evadarea entităților HTML specificând „encodeLabel”=>false :

Evaluarea deciziei

Ambele metode considerate sunt puțin „cârjă”, deoarece sunt non-universale și non-semantice. Non-semantice – pentru că ne fac să ne ocupăm de prezentarea articolelor și să generăm cod HTML/CSS. Neuniversale și nepolimorfe - deoarece nu vă permit să utilizați în mod transparent aceeași metodă getMenuList () în meniuri de diferite tipuri.

și în același timp ca un meniu de secțiuni cu pictograme în bara laterală:

Pentru fiecare tip de meniu, atunci va trebui să vă creați propria metodă precum getSimpleMenuList(), getIconMenuList(), etc.

Prin urmare, ambele abordări încalcă puritatea arhitecturală a codului, deoarece furnizorul de date, într-un mod bun, nu ar trebui să efectueze manipulări stilistice cu datele.

3. Decizie semantică

Din punct de vedere semantic, este mai corect să generați stiluri de markup HTML sau CSS în widget-ul propriu-zis pe baza datelor transmise acestuia din model. Pentru a face acest lucru, trebuie să creați propriul widget de meniu modernizat pentru fiecare caz specific. Moștenim din clasa de meniu standard și rescriem metoda de generare a articolelor în propria noastră:

Aici am folosit opțiunea de a adăuga o etichetă. Dacă doriți, puteți analiza implementarea opțiunii cu background-image:url(. ) în componenta EIconizedMenu.

Acum, acolo unde este necesar (de exemplu, în meniul principal sau în coloana laterală a site-ului), utilizați acest meniu în locul celui standard:

Am adăugat un nou parametru pictogramă pentru fiecare articol și un parametru iconPath pentru a specifica calea. Modelul de categorie actualizat ar putea arăta acum astfel

Adică, această metodă nu este diferită de versiunea standard originală, cu excepția câmpului de pictogramă adăugat. Același getMenuList() poate fi folosit polimorf pentru DIconMenu , CMenu și orice alte widget-uri de meniu.

Acest widget va genera un meniu cu pictograme de vizualizare

Dar, dacă doriți, puteți scrie propria dvs. clasă, care, ca și în EIconizedMenu, va adăuga stiluri la elemente precum

Asta e tot. Nu vă fie teamă să actualizați clasele străine existente derivând din ele și suprascriind unele dintre metodele lor. Acest lucru este mult mai convenabil decât să inventezi ceva supranatural de fiecare dată sau decât să schimbi fișierele de sistem.

Nu ratați noilearticole, bonusuri și cursuri de master pe Yii, Laravel și Symfony:

Unul dintre subiectele eterne care apar pe net din când în când cu privire la Cadrul Yii este disputa privind utilizarea interogărilor SQL directe prin DAO în proiectele lor, pe de o parte, versus utilizarea ActiveRecord pe de altă parte. La urma urmei, odată cu creșterea volumelor de date și a relațiilor dintre ele în proiecte foarte încărcate, mulți dezvoltatori trec de la un model de obiecte ActiveRecord convenabil la lucru la nivel scăzut cu interogări SQL directe și cu matrice asociative simple. Să vedem cum, în unele cazuri, puteți overclocka mostrele ActiveRecord aproape la viteza DAO.

Orice programator cu experiență este conștient de faptul că un proiect greu proiectat prost inițial sau în timp acumulează o mulțime de gunoi negestionați și inutile. Acesta este, de exemplu, un cod care se repetă. Descrierea controlorului din ghidul oficial Yii Framework afirmă că Yii acceptă eliminarea acțiunilor în clase separate și descrie procedura de conectare a acestor acțiuni la controlori. Dar puțini oameni folosesc această metodă, pentru că nu găsesc acțiuni repetitive cu adevărat grele.

Atunci când se dezvoltă magazine online sau diverși informatori pentru site-uri web, este adesea necesară implementarea primirii cursurilor de schimb curente. Nu toți dezvoltatorii știu că este destul de convenabil să primiți cursuri pentru orice dată folosind API-ul site-ului web al Băncii Centrale a Federației Ruse.

Da exact. Ar trebui să fie Yii::app()->createUrl(. ) sau array(. ).

Mulțumesc! Scrie mai multe despre Yii = )

este posibil să folosiți marcajul cu div? astfel încât imbricarea să fie construită și folosind div

Doar dacă înlocuiți singur metodele renderMenu și renderMenuRecursive în moștenitorul clasei CMenu. Ce rost are un div?

Mi-a plăcut asta http://vpaste.net/ZcHTo Ei bine, îl folosesc așa:

Cât de urât este? :)

Probabil că nu are prea mult sens, doar că designerul de layout l-a inventat http://i.imgur.com/DLnH0fK.png

Este mai bine să înlocuiți div-ul cu ul și să modificați puțin CSS-ul.