Drupal: jak na hezké URL, automaticky a bez problémů s diakritikou

Pokud vytváříte článek v Drupalu, pak jistě toužíte po tom, aby jeho adresa byla pro lidského čtenáře i roboty z vyhledávačů co nejpěknější. WordPress má v tomto výhodu - dělá to vlastně bez jakéhokoli dotazování. Drupal to samozřejmě umí také, ale po svém. Jinými slovy pro uživatele stejně pohodlně, pro vývojáře s většími možnostmi nastavení a tím pádem i složitější přípravou. Jaké jsou tedy možnosti Drupalu pro tvorbu pěkných adres článků?

Jako první předpoklad doporučuji zapnout podporu Čistých URL v /admin/settings/clean-urls. Drupal si vyžádá provedení testu a pokud je v souboru .htaccess správně nastaveno pravidlo pro webový server Apache (většinou vyhovuje výchozí podoba souboru z instalace), pak se zpřístupní zapnutí čistých URL. V adresách budou pouze lomítka, znaky ?q= již neuvidíte.

Čistá URL jsou zpříjemněním, modul Path je však nezbytností pro případ, že nechcete, aby každý ze článků měl adresu ve tvaru /node/XX, kde XX je pořadové číslo jeho vložení. Po aktivaci standardního modulu Path vám Drupal umožní při zadávání každého z článků vytvořit jeho alternativní adresu, alias. Přehled těchto aliasů pak najdete v /admin/build/path.

Ruční vytváření alternativních adres pro články s sebou přináší nutnost pamatovat na dodržování pravidel pro URL adresy. Neměly by obsahovat diakritiku, mezery a různé jiné znaky. Musíte si v ideálním případě vystačit s písmeny anglické abecedy, číslicemi a pomlčkami. Ještě horší situace je pro kategorie a jména uživatelů. Pro ně musíte aliasy vytvářet zcela manuálně v administraci.

Jak z toho ven? Použijte některé z modulů, které vytváření alternativních cest usnadňují. Začátečníkům připomínám, že v alternativní adrese není celé URL, pouze jeho část následující za adresou webu a lomítkem, tedy např. navody, nikoli https://www.maxiorel.cz/navody.

URLify

Nejjednodušším modulem určeným pro automatickou tvorbu aliasů je URLify. Technicky funguje tak, že do stránky přidá JavaScriptový kód, který při vkládání článku sleduje změny v jeho nadpisu a podle toho upravuje zadání adresy. Automaticky odstraňuje diakritiku, mezery a nepovolené znaky, nahrazuje je znaky bez diakritiky nebo pomlčkami. Současná verze již podporuje i české znaky s diakritikou, nicméně za předpokladu, že na začátku nadpisu není velké písmeno (ŠČŘŽ...). V takovém případě je tento znak odebrán a v aliasu se vůbec neobjeví.

Modul URLify jsem dlouhou dobu používal zde na Maxiorlovi (samozřejmě s opravou zmíněného problému). Modul prakticky nezatěžuje načítání stránek a nastavený je během pár okamžiků. Jeho nedostatkem je však skutečnost, že jde jen o pomůcku pro vytváření adresy článků. Stále tu zůstává problém s kategoriemi a uživateli. Málokdo se spokojí s adresami typu /taxonomy/term/99 nebo /user/23.

Pathauto

Kompletní servis pro tvorbu alternativních adres obstarává modul Pathauto. Na rozdíl od předchozího je k dispozici i pro Drupal 6.x. Při zadávání článku neobtěžuje JavaScriptem, adresa je prostě automaticky vytvořena po uložení. Automatiku můžete nicméně vypnout a adresu zapsat ručně. Nejlepší však je, že Pathauto sám vytváří odpovídající aliasy pro názvy kategorií, skupiny ve fóru, nebo pro adresy uživatelských profilů.

Počáteční nastavení modulu je poněkud složitější, ale do budoucna se vyplatí - udělá maximum možného pro optimalizaci adres na webu pro vyhledávače. V obecném nastavení doporučuji ponechat výchozí hodnoty: spojovník jako oddělovač slov a náhradu mezer a změnu písmen na malá. Upravte si maximální délku vytvářené adresy a zvolte Leave the old alias intact. Při změně nadpisu článku se pak jeho adresa nezmění, případně ji upravíte ručně. Změny adres již existujících článků, na které vedou odkazy z jiných webů nebo vyhledávačů totiž způsobí, že se čtenář na článek nedostane.

Pozor na FCKeditor. Pokud jej máte nastaven, objeví se vám pro boxík String to remove a ze seznamu řetězců pro odstranění z adresy udělá odstavec textu. Výsledek bude ten, že Pathauto nebude v některých případech fungovat správně. Proto editor pro toto políčko standardním způsobem vypněte. Mimochodem, v tomto políčku jsou uvedena většinou anglická slova, která je zbytečné dávat do adresy. Pro češtinu si zde můžete doplnit jednopísmenné předložky a spojky.

Ve skupině Punctuation settings nastavujete, čím se mají nahradit různé znaky ve větách, jako je tečka, dvojtečka, středník, apostrof atd. Můžete je odstranit nebo nahradit oddělovačem.

Pathauto - nastavení cest

Další skupiny v nastavení modulu Pathauto jsou podobné. S využitím zástupných vzorů z modulu Token (je nutné jej instalovat spolu s Pathauto), nastavíte, jaký má být tvar automaticky vytvářeného názvu článku (berou se v potaz různé typy obsahu), příspěvku ve fóru, profilu uživatele nebo kategorie. Pokud si rozklepnete skupinu Replacement patterns, uvidíte, jaké vzory můžete použít.

Příklad: Pro každý z článků budete chtít automaticky vytvářet adresu, která zohlední typ článku (třeba návod, anketa, bleskovka, tiskovka...) a jeho kategorii. Výsledný alias by měl být například navod/pro-zacatecniky/jak-postavit-dum. Do políčka Default path pattern tedy zadejte [type-name]/[term]/[title]. Ostatní políčka pro jednotlivé typy článků nechejte prázdná - použije se výchozí nastavení. Podobně si můžete upravit aliasy ke kategoriím nebo uživatelským profilům.

Pathauto a diakritika

Nejčastěji řešeným problémem modulu Pathauto je diakritika. Aby totiž znaky v aliasu adresy byly nahrazeny variantou bez diakritiky a nevzniklo něco takového seznam-cz-m%C4%9B-posunuje-st%C3%A1le, pak musíte v Obecném nastavení modulu Pathauto zapnout funkci Transliterate prior to creating alias. Modul pak před vytvořením aliasu všechny znaky převede.

Běžně však funkci zapnout nelze. Vyžaduje totiž soubor, ve kterém budou uvedeny původní a převedené varianty jednotlivých znaků. Soubor s názvem i18n-ascii.txt je nutné umístit do složky modulu Pathauto. Teprve poté se vám volba Transliterate prior to creating alias zpřístupní pro aktivaci.

Zmíněný soubor si můžete sami vytvořit, nebo použít takový, který vytvořil někdo před vámi. V tom případě bude asi ideální ten, který na rozdíl od ukázky v balíčku s modulem obsahuje úplně všechny znaky z kódování UTF-8. Doporučuji vám jeho stažení přímo z Drupal.org, drupal.org/files/issues/i18n-ascii-full.txt.

Doporučuji vám věnovat instalaci modulu Pathauto několik minut, které si vyžádá. Jde o mnohem dokonalejší řešení než je URLify a pomůže vám k lepšímu vzhledu adres v rámci celého webu. Nasadit jej můžete i na již existující web. Dovede totiž vytvořit aliasy i pro stávající články, kategorie, fóra nebo uživatelské profily. Stačí jej o to požádat.

Buďme ve spojení, přihlaste se k newsletteru

Odesláním formuláře souhlasíte s podmínkami zpracováním osobních údajů. 
Více informací v Ochrana osobních údajů.

Autor článku: Jan Polzer

Tvůrce webů z Brna se specializací na Drupal, WordPress a Symfony. Acquia Certified Developer & Site Builder. Autor několika knih o Drupalu.
Web Development Director v Lesensky.cz. Ve volných chvílích podnikám výlety na souši i po vodě. Více se dozvíte na polzer.cz a mém LinkedIn profilu.

Komentáře k článku

návštěvník

Pri pokusu o Blog - Bulk generate aliases for blogs that are not aliased

Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 75 bytes) in /www/modules/pathauto/pathauto.inc on line 152

návštěvník

Když vypnu "Transliterate prior to creating alias" tak problem prestane, pri zapnuti opet nastane...

nejaka rada?

Profile picture for user Jan Polzer

Jasně... To je problém toho, že je na serveru nastavena nedostatečná paměť pro běh PHP skriptů. Prováděný úkol je už prostě paměťově přilíš náročný a tak to zkolabuje. Řešením je domluva s poskytovatelem webhostingu.

 

návštěvník

ok a kolik pameti potrebuji? abych se ptal na konkkretni cislo...

Profile picture for user Jan Polzer

no podle té chyby se Drupalovi nedostalo dalších 75 bytů nad aktuální limit...

 

návštěvník

Nebo jinak, jsem si ten soubor upravil a ručne jsem pouzil na prepsani pouze ceske znaky ň, č, ď, atd
pri vytvoreni noveho clanku to funguje v pohode... ale ty stare jsou stale s hacky... presto jsem vsechny sekce "bulkoval", kde je chyba?

Profile picture for user Jan Polzer

staré jsou s diakritikou proto, protože už prostě existují. Proto se ta volba jmenuje Bulk generate aliases for nodes that are not aliased. Musely by se nejprve smazat aktuální aliasy ze seznamu.

 

návštěvník

co na to rekne google?

Profile picture for user Jan Polzer

totéž co ostatní vyhledávače. Bude mít zaindexovanou stránku s určitou adresou a pak zjistí, že stránka neexsituje. Takže ji vyřadí z indexu a časem ji nahradí za stránku s novou adresou bez diakritiky.

 

návštěvník

Tak pokial viem tento modul vie odstranit len to co je za index.php?q=, alebo sa myslim? Na uplne take ciste ako mate tu na webe je predsa potrebne i rewrite v lighttpd resp. apachovi.

s rewrite:
http://www.maxiorel.cz/bleskovky
bez rewrite:
http://www.maxiorel.cz//index.php?q=bleskovky

je to tak ci toto ide zariadit i v module pathauto ? Ak ano tak asi zbytocne pouzivalm rewrite :(.

Profile picture for user Jan Polzer

Samozřejmě, že je potřeba rewrite. Ale o tom článek není. Pokud jste špatně pochopil jeho smysl, omlouvám se za nesrozumitelnost.

návštěvník

dobrý den,
potřeboval bych poradit v tomto tématu. Stále i po přejmenování souboru na i18n-ascii.txt a po jeho povoleni v nastaveni pathauto se mi v url objevuje diakritika

Profile picture for user Jan Polzer

Až teď jsem si pořádně přečetl vaše slova o "přejmenování souboru na...". Co jste vlastně přejmenoval? Potřebný soubor není součástí modulu, musíte si jej stáhnout. Řekl bych, že asi tady bude problém. Stáhněte si jej třeba odtud http://www.maxiorel.cz/sites/all/modules/pathauto/i18n-ascii.txt

návštěvník

soucasti modulu je soubor i18n-ascii.example.txt, takze by u nej melo stacit jej prejmenovat na i18n-ascii.txt, jestli tomu spravne rozumim. a nebo pro ceske znaky tento soubor naplnit takhle:

; global transliteration
[default]
á = "a"
é = "e"
í = "i"
ó = "o"
...

je to tak spravne? ani pri pouziti vaseho souboru mi to stale nefunguje

Profile picture for user Jan Polzer

Ten example je opravdu jen example, soubor, na který jsem Vám dal odkaz obsahuje všechny znaky národních abeced. Je taky mnohem větší. Je jednodušší jej použít místo úpravy původního vzorového souboru.

Pokud Vám to nejede ani teď, zřejmě je chyba někde ve webu.

návštěvník

Řeším ten stejný problém s diakritikou. Modul pathauto používam již dlouho a nikdy jsem s ním neměl problém. Nedávno jsem měnil poskytovatele hostingu a po jeho změně přestal modul pathauto fungovat, respektive, sice vytvoří url aliasy, ale s diakritikou. Nastavení by mělo být zcela v pořádku, protože ten samý web s pathauto bez problému funguje jak na původním hostingu, tak na locale, kde používám Wamp server. Vyzkoušel jsem již všechny verze modulu i různé verze souboru i18n-ascii.txt, ale bezúspěšně. Prohledal jsem už snad všechny fóra, ale také bez náznaku úspěchu, takže nevím.

Můj dotaz tedy zní, je třeba nějakých dodatečných nastavení na serveru poskytovatele, aby modul fungoval a správně odstranil diakritiku z url? V PHP jsem spíše začátečník.

Předem děkuji za jakoukoli radu.

Profile picture for user Jan Polzer

Použijte Pathauto v aktuální dev verzi, doplňte modul Transliteration a zapněte v nastavení URL aliasů odtraňování diakritiky volbou Přeložit na správný formát. Pak to bude fungovat.

návštěvník

Pri pouziti Transliteration modulu (Pathauato, Drupal 7) mi to nefungovalo. Potom som zistil, ze je treba okrem zaskrtnutia "Transliterate prior to creating alias " najprv vymazat existujuce aliasy: /admin/config/search/path/delete_bulk a az potom dat bulk update: /admin/config/search/path/update_bulk

návštěvník

Nie je dobre/lepsie pouzit modul http://drupal.org/project/transliteration pre zmenu diakritiky, je pouzitelny i pre image, subory a pod, ved kopec ludi posiela subor na server ako "snímok číslo 1.jpg" a "podobne sialenosti"

návštěvník

Zdravím, díky za zajímavý článek i následnou diskuzi...
Vše už jsem podle tohoto návodu rozjel, ale pořád narážím na trochu jiný problém - adresy se mi zobrazují ve tvaru http://neco.domena.cz/neco/xx - neporadil by mi prosím někdo, kde se to dá nastavit, aby se mi tam název subdomény znovu neopakoval a adresa byla ve tvaru http://neco.domena.cz/xx ? Díky moc, nikde to nemůžu najít...

návštěvník

nato uz treba rewrite v httpd

návštěvník

Díky za článek, hodně mi toto pomohlo.

Lukáš

návštěvník

Pán Polzer, máme na webu zónu pre prihlásených kde si môžu stiahnut subori. Avsak, ked je niekto sikovny, tak si adresu opise, lebo ju napr. Firefox zobrazi dolu v rohu. A tak moze sirit obsah ktorý je iba pre klientov.

Viete o nejakom module, alebo o niecom co by pregenerovalo url adresy? Napr ako to ma linkedin http://lnkd.in/d25ag67

dakujem

Profile picture for user Jan Polzer

Ale vždyť to je jednoduché a nepotřebuje to žádný modul. Nastavte si složku pro privátní soubory a udělejte u obsahu políčko, přes které se budou citlivé soubory nahrávat. Pak si je nebude moci stahovat kdokoli, ale jen ti, kdo nastavíte. Viz https://drupal.org/documentation/modules/file a diskuze pod tím.

Přidat komentář

Odesláním komentáře souhlasíte s podmínkami Ochrany osobních údajů

reklama
Moje kniha o CMS Drupal

 

Kniha 333 tipů a triků pro Drupal 9


Více na KnihyPolzer.cz

Sledujte Maxiorla na Facebooku

Maxiorel na Facebooku

Hosting pro Drupal a WordPress

Hledáte český webhosting vhodný nejenom pro redakční systém Drupal? Tak vyzkoušejte Webhosting C4 za 1200 Kč na rok s doménou v ceně, 20 GB prostoru a automatické navyšováním o 2 GB každý rok. Podrobnosti zde.

@maxiorel na Twitteru

Maxiorel na Twitteru