Přeskočit přímo na text


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
About the author

Jakub Suchý je provozovatelem projektu Drupal.cz. Je členem Drupal Security Teamu, vytvořil několik volně dostupných modulů a také se Drupalem živí.

 

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ář

Obsah tohoto pole je soukromý a nebude veřejně zobrazen.
  • You can use Texy! to format and alter entered content.
  • Povolené HTML značky: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <p> <br> <b> <i> <h2> <img> <pre> <sup> <sub> <pre class="php"> <span class="php-keyword1"> <span class="php-var"> <span class="php-num"> <img class="screenshot"> <p class="beginner"> <a class="greybox"> <h3> <h4>

Více informací o možnostech formátování

Hledat

Přihlášení

Poslední komentáře