A Drupal-nak van egy globális változója, melynek a funkicója az, hogy visszadja azt az URL címet ahol a telepített CMS-ünk aktuálisan el van helyezve.
Ennek a lényege az, hogy pl. ha a fejlesztés egy már meglévő domain egy alkönyvtárában zajlik, akkor a site élesítésekor ne történjen semmilyen probléma. Gyakorlatilag a telepített Drupal-t akárhova pakolhatjuk, a képek elérései és az oldal elérések nem változnak.

Ez a változo a

  1. <?php
  2. $GLOBALS['base_url'];
  3. ?>

Ha ezt használjuk akkor mondjuk egy kép, vagy egy oldal eléréshez nem kell beledrótóznunk a fejlesztéshez használt alkönyvtár nevét.
Ha a Drupal pl. a root/ujweboldal könyvtárban van, akkor ha egy oldal elérését így adjuk meg:

  1. <a href="/kapcsolat">Kapcsolat</a>

akkor nem a root/ujweboldal/kapcsolat oldal fog bejönni, hanem a root/kapcsolat. Ez pedig komoly problémékat okozhat.

Ezt elkerülendően általában a következő eljárást szoktuk alkalmazni:

  1. <a href="<?php print $GLOBALS['base_url'] ?>/kapcsolat">Kapcsolat</a>

Ekkor akárhova helyezzük az oldalt müködni fog az elérés.

Viszont felmerült egy probléma ha az oldalt át akarjuk irányítani a www nélküli címéről a www-s címére.
Ez azt jelenti, hogy beállítunk egy olyan redirect-et, hogy a http://example.com automatikusan menjen át a http://www.example.com címre.

A probléma a form-ok feldolgozásánál jelentkezik!

  1. <form action="<?php print $GLOBALS['base_url'] ?>/form-feldolgozas" method="post"></form>

A jelenség az, hogy a felhasználó megérkezik az oldalra és kitölti a űrlapot, majd a submit eseményt követően nem történik meg a mentés mert az adatok nincsenek benne a $_POST tömbbe. Elkedztem újra végignézni a folyamatot, hogy hol vesznek az értékek.

Észrevettem, hogy a form action paraméterében a $GLOBALS['base_url'] változó miatt az URL www nélküli címe szerepel, emiatt a $_POST adatok a domain www nélküli oldalára mennek át.
Ekkor a következő történik: az action meghívja a www nélküli oldal elérését, a redirect továbbdobja a www-s címre és közeben már nem szerepelnek az adatok a $_POST tömbben, mivel a síma, www nélküli elérésre lettek elküldve. Tehát a redirect miatt elvesztek.

A megoldás az, hogy a form-ok action paraméterében, nem a $_GOLBALS['base_url'] változót adjuk meg, hanem a Drupal beépített url() fgv-ét, mely nem a teljes URL címet adja vissza, hanem a telepített Drupal root könyvtárát.

Tehát a $_GLOBALS['base_url'] helyett a form-ban a következőt alkalmazzuk:

  1. <form action="<?php print url('form-feldolgozas') ?>" method="post"></form>

Hogy szemléltessem a kettő közötti különbséget hasonlítsuk össze a két kód HTML kimenetét:

  1. <form action="<?php print $GLOBALS['base_url'] ?>/form-feldolgozas" method="post"></form>
  2. <form action="<?php print url('form-feldolgozas') ?>" method="post"></form>
  1. <form action="http://example.com/ujweboldal/form-feldolgozas" method="post"></form>
  2. <form action="/ujweboldal/form-feldolgozas" method="post"></form>

Leave a Reply