Jak napsat vlastní modul pro Drupal - díl 4. - Odkazy
Dnes velmi krátce o tom, jak tvořit odkazy v modulech, případně snippetech.
Poznámka: Tento seriál vychází jako návod pro tvorbu modulů k Drupalu 5. Informace nejsou platné pro vyšší verze Drupalu.
Pokud generujete HTML kód či prostě jakýkoliv kód pomocí modulu v Drupalu, občas potřebujete odkázat na nějakou stránku. Můžete to udělat jednoduše napsáním:
<a href="http://stranka.com">text</a>
To ale není ideální řešení. Pojďme se podívat na to, jak to udělat lépe.
Pro tvorbu odkazů Drupal nabízí dvě API funkce. Obě se odlišují od ručního zápisu hlavně tím, že správně generují aliasy stránek. Stačí funkci předhodit odkaz na node/XYZ a ona Vám automaticky vrátí konkrétní alias. Nemusíte se tak o aliasy starat a nemusíte měnit odkazy vždy, když změníte alias (i když ani to byste dělat neměli).
l()
Funkce l() generuje přímo HTML kód odkazu. Její zápis je:
l($text, $path, $attributes = array(), $query = NULL, $fragment = NULL, $absolute = FALSE, $html = FALSE)
Na příkladech: Tento příklad ilustruje plné použití funkce. Zkráceně parametry:
- $text je text odkazu.
- $path je cesta, absolutní nebo interní. Funguje node/1 i
http://neco.cz. - $attributes je asociativní pole atributů, viz příklad.
- $html je $text html kód?
// kod
print l('Stranky o Drupalu', 'http://www.drupal.cz', array('class' => 'mujodkaz'), 'debug', '#top', false, false);
// vysledek
<a href="http://www.drupal.cz?debug#top" class="mujodkaz">Stranky o Drupalu</a>
// kod - vsimnete si, ze vsechny parametry nejsou povinne
print l('Jizdni rady ve svete', 'http://www.timetables-world.com');
// vysledek
<a href="http://www.timetables-world.com">Jizdni rady ve svete</a>
// kod - interni link
print l('Clanek o blocich', 'node/1845');
// vysledek - plati pro drupal.cz
<a href="clanky/pro-webmastery/jak-napsat-vlastni-modul-pro-drupal-dil-3-bloky">Clanek o blocich</a>
url()
Funkce url() negeneruje HTML kód, ale pouze samotný text odkazu. Slouží pro kompletaci odkazu v případě aliasů, apod.
url($path = NULL, $query = NULL, $fragment = NULL, $absolute = FALSE)
Parametry jsou:
- $path je cesta
- $query je to, co se objeví za otazníkem, parametry stránky.
- $fragment je anchor, #neco.
- $absolute buď generuje absolutní link nebo relativní
Opět příklady:
// kod
print url('node/1845');
// vysledek
clanky/pro-webmastery/jak-napsat-vlastni-modul-pro-drupal-dil-3-bloky
// kod
print url('node/1845', false, false, true);
// vysledek
http://www.drupal.cz/clanky/pro-webmastery/jak-napsat-vlastni-modul-pro-drupal-dil-3-bloky
D 6.x?
Co takhle tento seriál psát pro Drupal 6.x?
pak vyjde update
pak vyjde update
A kdy ho asi můžeme
A kdy ho asi můžeme čekat? Můžeme ho čekat?
Předem díky za odpověď.
Imho z 95% je to vsetko
Imho z 95% je to vsetko platne aj pre D6.
No konkretne tento clanok je
No konkretne tento clanok je platny asi tak z polovice kedze prave funkcie l() a url() su v drupal 6 zmenene, co sa tyka parametrov, ked vzdy beru iba 3 parametre z ktorych posledny je asociativne pole, miesto dlheho vypoctu parametrov v ramci funkcie. :)
Pravda pravda, cital som
Pravda pravda, cital som o tom :) Sorry ale Drupal 6 budem studovat az ked bude treba, zatial beriem informacie len tak vseobecne :). Ale inak su tie veci o moduloch velmi podobne. Kto proste dojde na princip programovania v Drupale, nemal by mat problem ani z D6.
Zend
Máte programovat v Zednu, ten vám při nakonfigurovaném projet parametry funkcí sám nabídne s nápovědou :)
co je ...
A co je to Zedn, a co znamená „vám při nakonfigurovaném projet“ ? Cože to mám projet? :-)
Pardon, nějak jsem si to po
Pardon, nějak jsem si to po sobě nezkontroloval. Myslel jsem samozřejmě v Zendu a …projektu…
link na obrazky
Ahoj, jak pomoci l() a url() udelam link na soubor ve /files? Je to na to vubec vhodne? Dekuji.
Drupal jádra 6.5 prý nekompatibilní s mým modulem.
Ahoj. Napsal jsem podle návodu tady a webu svůj mobul. Ale můj web mi hlásí „Tato verze je nekompatibilní s verzí 6.5 jádra Drupalu.“ ve výpisu modulů. Čím to? co to znamená? Nakonec jsem modul upravil, že tam jsou jen prázdné nic nedělající funkce. Ale ani to nepomohlo. Nebo jsem funkce nakopíroval z http://api.drupal.org/…ple.module/6, ale hláška o nekompatibilním verzi jádra furt stejná. soubor page_example.info je taky vzorová :
; $Id$ page_example.info, v 1.1 2008/07/06 20:00:00 neojiri Exp $
name = „page_example“
description = „page example“
version = „6.x-1.1“
core = 6.5
project = „page_example“
dependencies =
package = Other
Pochopitelně mám v adresáři „/sites/all/modules/page_example“ soubory page_example.info, .install, .module
Tak nechápu co je potřeba udělat?
Díky za radu.
core = 6.x ?
core = 6.x ?
jj
jo to jsem zkusil různé varianty: core 6.x i core 6.5, všechno marnost ale teď jsem zkopíroval soubor fast_gallery.info a přejmenoval na moje.info, to upravil na :
; $Id$
name = „My Fotos“
description = „vytvořiljsem“
core = 6.x
package = Other
dependencies[] = „thickbox“
; Information added by drupal.org packaging script on 2008–09–19
version = „6.x-2.3“
core = „6.x“
project = „myfotos“
datestamp = „1221802217“
a běda jak tam změním
dependencies = ""
tak to rázem nefunguje a napíše „Tato verze je nekompatibilní s verzí 6.5 jádra Drupalu.“ přesto, že soubory .install a .module jsou vlastně nic nedělající.aha asi hotovo
tak stačilo celý řádek dependencies = "" smazat a bylo to
Poslat nový komentář