Kako održavati ogromne menije u Drupalu
Jednom sam otvorio Drupal meni sa nekoliko hiljada linkova i gledao kako pregledač odustaje pre mene. Stranica se, tehnički, učitala. Zatim je svaki klik delovao kao da tražim od starog štampača da objasni svoja osećanja.
Počnite sa BigMenu i Menu Select
Ako Drupal sajt ima veliki urednički meni, prvi problem obično nije arhitektura. Problem je ekran za urednike. Stranica za administraciju menija u jezgru Drupala može postati bolna kada meni naraste na hiljade linkova. BigMenu to rešava tako što menja način na koji urednici pregledaju i upravljaju menijem: umesto da forsira celo stablo na stranicu, omogućava otvaranje podstabala preko AJAX-a onda kada su uredniku potrebna. https://www.drupal.org/project/bigmenu
To zvuči kao sitnica dok ne koristite podrazumevani interfejs za meni na velikom sajtu. Sklopljeno stablo i dalje boli ako je Drupal morao da izgradi celu strukturu pre nego što je stranica postala upotrebljiva. Vrednost BigMenu modula je u tome što izbegava to početno masovno učitavanje. Urednik vidi deo stabla koji je tražio, a ne celu šumu. https://www.drupal.org/project/bigmenu
Menu Select rešava drugačiju iritaciju. U formularima za sadržaj urednici često moraju da izaberu roditeljsku stavku menija. Sa velikim menijem, obična lista za izbor je apsurdna. Niko ne želi da skroluje kroz hiljade stavki samo da bi jednu stranicu smestio pod odgovarajućeg roditelja. Menu Select zamenjuje to iskustvo upotrebljivijom hijerarhijom i može dodati automatsko dopunjavanje, tako da urednik može da pretraži roditeljski link umesto da ručno luta kroz ceo meni. https://www.drupal.org/project/menu_select
Sviđa mi se ova podela. BigMenu pomaže kada upravljate samim menijem. Menu Select pomaže kada povezujete sadržaj sa menijem. Lako ih je pomešati jer oba utiču na UX menija, ali rešavaju različite trenutke u uredničkom toku rada.
Menu Select Ajax: učitaj izbor kada je uredniku potreban
Menu Select sa automatskim dopunjavanjem je već veliki korak napred. Ali na veoma velikim sajtovima čak i bolji vidžet može i dalje biti pretežak ako formular pokušava da pripremi previše podataka o meniju pre nego što urednik bilo šta uradi. Tu AJAX obrazac za izbor menija ima smisla.
Ideja je jednostavna: formular ne bi trebalo da gradi kompletan selektor roditelja za ogroman meni pri početnom učitavanju. Trebalo bi da sačeka. Kada urednik izabere meni, unese pojam za pretragu ili otvori granu, Drupal može da pošalje mali AJAX zahtev i vrati samo odgovarajući deo menija. Drupalov Form API podržava ovaj obrazac kroz elemente formulara omogućene za AJAX, gde korisnička akcija pokreće ponovno građenje na strani servera, a zamenjuje se samo izabrani deo formulara. https://www.drupal.org/docs/develop/drupal-apis/javascript-api/ajax-forms
U praksi, AJAX izbor menija obično ima dva sloja. Prvi sloj je vidljivi selektor: polje za pretragu, birač roditelja ili mala proširiva grana. Drugi sloj je sačuvana vrednost: stvarni ID plugina za link menija ili referenca na roditelja koja je Drupalu potrebna kada se formular sačuva.
Ova razlika je važna. Urednici treba da rade sa oznakama, putanjama i poznatim naslovima stranica. Drupal treba da čuva stabilne mašinske vrednosti. Kada se te dve brige pomešaju, vidžeti za velike menije postaju krhki. Pojavljuju se duplirane oznake, nejasni izbori roditelja i spora ponovna građenja formulara.
Dobar tok AJAX izbora menija deluje gotovo dosadno. Urednik počne da kuca deo naslova. Drupal vrati kratku listu mogućih roditeljskih linkova, po mogućnosti sa dovoljno konteksta da se razlikuju identični naslovi. Urednik izabere jedan. Formular u pozadini sačuva izabrani link menija. Nema ogromne liste za izbor. Nema renderovanja celog stabla. Nema raspada pregledača.
Isti obrazac funkcioniše i za proširive grane. Prvo prikažite najviši nivo. Kada urednik otvori roditelja, dohvatite decu tog roditelja. Ako otvori još jedno dete, dohvatite sledeći nivo. Tako bi interfejs trebalo da se ponaša kada je skup podataka veliki: mali zahtev, mali odgovor, jasna sledeća akcija.
Na 10.000 stavki menija, prestanite da učitavate unapred
Kada meni dostigne nešto poput 10.000 stavki, prestajem da ga posmatram kao običan Drupal meni. Tehnički, to je i dalje meni. Operativno, više liči na indeks sadržaja u obliku stabla.
Uobičajena greška je krenuti od korena, učitati celo stablo, proširiti aktivnu putanju, a zatim odbaciti većinu rezultata. To funkcioniše na malim menijima. Na ogromnom meniju, to je pogrešan smer.
Bolji pristup koji sam koristio bio je učitavanje unazad. Počnite od aktivnog linka menija za trenutnu stranicu. Odatle učitajte samo njegove roditelje. To vam daje aktivnu putanju bez traženja od Drupala da izgradi svaku nepovezanu granu. Drupalovi API-ji za meni podržavaju ovaj smer kretanja: menadžer linkova menija može da pronađe linkove po ruti, a takođe izlaže ID-jeve roditelja za plugin linka menija. https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Menu%21MenuActiveTrail.php/11.x https://api.drupal.org/api/drupal/core%21lib%21drupal%21core%21menu%21menulinkmanagerinterface.php/function/menulinkmanagerinterface%3A%3Agetparentids/9
Ovo potpuno menja profil troškova. Ogroman meni može imati 10.000 stavki, ali aktivna putanja za jednu stranicu obično je kratka. Možda pet nivoa. Možda sedam. Čak i dubok katalog retko ima desetine predaka za jednu stavku. Dakle, umesto da učitavate 10.000 linkova da biste otkrili jednu putanju, učitavate aktivnu stavku i idete nagore.
Posle toga možete odlučiti koliko okolne navigacije stranici zaista treba. Ponekad je roditeljska putanja dovoljna. Ponekad su vam potrebna i deca aktivne stavke. Ponekad su vam potrebne susedne stavke na jednom nivou za meni sekcije. U redu. Učitavajte te isečke namerno. Ne dozvolite da se „potrebna nam je navigacija” tiho pretvori u „učitaj celo stablo pri svakom zahtevu”.
Drupalov sistem stabla menija već razmišlja kroz parametre stabla, aktivne putanje i transformacije. Uobičajeni pristup učitavanju stabla može proširiti linkove duž trenutne aktivne putanje, što je korisno na normalnim menijima. https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Menu%21MenuLinkTreeInterface.php/interface/MenuLinkTreeInterface/8.2.x Međutim, kod veoma velikog menija više volim da budem stroži. Prvo pronađite aktivni link. Zatim učitajte njegove roditelje. Onda učitajte samo granu potrebnu za trenutnu stranicu.
Pravo pravilo održavanja: nikada ne terajte urednike da plate cenu celog menija
Ogromni Drupal meniji nisu samo problem renderovanja. Oni su urednički problem, problem građenja formulara, problem keša, a ponekad i problem informacione arhitekture koji je neko odlagao tri godine.
BigMenu pomaže urednicima da rade sa velikim stablima bez otvaranja svega odjednom. https://www.drupal.org/project/bigmenu Menu Select čini izbor roditelja podnošljivim, posebno uz automatsko dopunjavanje. https://www.drupal.org/project/menu_select AJAX izbor sprečava formulare da pripreme hiljade opcija pre nego što urednik napravi prvi smislen klik. https://www.drupal.org/docs/develop/drupal-apis/javascript-api/ajax-forms
Za front-end navigaciju, učitavanje unazad je deo koji bih najagresivnije štitio. Počnite od aktivnog linka menija. Učitavajte samo roditelje. Dodajte decu ili susede samo kada ih dizajn zaista zahteva. Ta jedna navika sprečava da meni od 10.000 stavki pretvori svaki zahtev u kaznu.
Pregledač nikada ne bi trebalo da nosi ceo meni samo zato što jedna stranica treba da zna gde se nalazi.
Tražite najbolju kompaniju za Drupal razvoj na tržištu? Upravo ste je pronašli.
Mi smo najveća digitalna agencija fokusirana na Drupal, izgrađena da isporučuje brze, bezbedne i skalabilne platforme — bez kompromisa. Od novih izrada i redizajna do migracija i dugoročne podrške, naši Drupal stručnjaci isporučuju rezultate poslovnog nivoa uz pažnju butik agencije.
Zakažite poziv danas i pretvorimo vašu Drupal mapu puta u visokoperformantnu stvarnost.
projects@drupalbook.org