Elérési utak - l() és theme() függvények külső (saját) fájlból

Sk8erPeter képe

Sziasztok!

Elérési utakkal kapcsolatos problémám van. Saját külső fájlból próbálok Drupal-függvényeket hívogatni (include-olva a megfelelő Drupal-fájlokat), de sajnos mindig belekerülök abba a problémába, hogy az aktuális fájl könyvtárának elérési útját is belerakja az l() és theme() függvényhívások hatására.

BŐVEBBEN (remélem lesz valaki, aki ki tudja bogozni, miről is beszélek :D):
Saját külső fájlomból, nem Drupalba beépített modulból hívom meg az <a href="http://api.drupal.org/api/drupal/includes--common.inc/function/l/6">l()</a> és <a href="http://api.drupal.org/api/drupal/includes--theme.inc/function/theme/6">theme()</a> függvényeket, de a Drupal alkönyvtárainak egyikéből (/sites/all/themes/myTheme/templates/php).
Hadd ne indokoljam hosszan, miért, a lényeg, hogy írtam egy saját osztályt, aminek a metódusait AJAX-szal hívogatom, de Drupal-modulba beépíteni több macera lett volna, mint amennyi idő alatt csináltam ennyit (csúf kerülő megoldás, hogy az elérési utak az include-oláshoz stimmeljenek, de most nem érdekel, hogy ronda):

// tároljuk az aktuális working directory-t, majd rootra váltunk
$currdir=getcwd();
chdir($_SERVER['DOCUMENT_ROOT']);
require_once("./includes/bootstrap.inc");
$cookie_domain = $_SERVER['HTTP_HOST'];
drupal_bootstrap( DRUPAL_BOOTSTRAP_FULL );
 
// saját kódom...
// ....
 
// visszaváltjuk a working directory-t
chdir($currdir);

Legfeljebb később tervezem beépíteni, most ez lesz a "megoldás".

A kérdés:
A saját kódban ezt a függvényt hívom:

    $imagecache_profile_picture_with_link = l(
        theme(
            'imagecache',
            'profile_pictures_blablabla_ez_a_sajat_preset',
            $profile_pic_array['filepath'],
            $pic_alt_text,
            $pic_title_text
        ),
        'user/'.$user->uid,
        array(
            'html' => true,
        )
    );            

Az elérési útvonal viszont itt (hiába használom a "csodálatos" chdir($_SERVER['DOCUMENT_ROOT']); függvényt) az aktuális fáljhoz képesti lesz, tehát ilyen:

<a href="/sites/all/themes/myTheme/templates/php/users/ez_egy_felhasznalo_adatlapja">
   <img src="http://ez_az_en_drupal_oldalam.hu/sites/all/themes/myTheme/templates/php/sites/default/files/imagecache/profile_pictures_blablabla_ez_a_sajat_preset/imagefield_default_images/default_avatar1.gif" alt="Profile picture of Valaki..." title="Profile picture of Valaki..." class="imagecache imagecache-profile_pictures_blablabla_ez_a_sajat_preset" width="60" height="60" />
</a>

Ebből nekem csak ez kellene:

<a href="/users/ez_egy_felhasznalo_adatlapja">
   <img src="/sites/default/files/imagecache/profile_pictures_blablabla_ez_a_sajat_preset/imagefield_default_images/default_avatar1.gif" alt="Profile picture of Valaki..." title="Profile picture of Valaki..." class="imagecache imagecache-profile_pictures_blablabla_ez_a_sajat_preset" width="60" height="60" />
</a>

Tehát az aktuális fájl elérési útja (/sites/all/themes/myTheme/templates/php) ne kerüljön már bele...

Ez elérhető valahogy?
Most ne azt javasoljátok, hogy "ugyan pakold már bele egy modulba, vazze". :D

Köszi!

Drupal verzió: 
Sk8erPeter képe

Ha nem teljesen világos, amit írtam, kérdezzetek!

(Miért nem lehet szerkeszteni a saját eredeti postot? -.-)

0
0
pp képe

hát ha nem zavar, hogy ronda akkor:

<?php
$imagecache_profile_picture_with_link = str_replace('/sites/all/themes/myTheme/templates/php', '', $imagecache_profile_picture_with_link);
?>

LOL

egyébként meg "ugyan pakold már bele egy modulba, vazze"

pp

4
0
Sk8erPeter képe

Hali!

Köszönöm a választ! (+1) Teljesen jogos a lezárás. :)
Jobb megoldást én sem találtam. Egyébként tulajdonképpen azért csapja hozzá az aktuális könyvtár elérési útját, mert lehetséges, hogy a Drupal akár egy tizedik alkönyvtárban van egy szerveren?

U.i.: egyébként de, zavar, hogy ronda. :) Később javítom.

0
0
pp képe

<gányolunk>

<?php 
  global $base_url;
  $base_url = '';
?>

</gányolunk>

"ugyan pakold már bele egy modulba, vazze"

pp

2
0
Sk8erPeter képe

Köszi szépen, ez kiszedte a domainnévvel tarkított abszolút címet a theme() függvény által visszaadott stringből.
Az l() függvénynél nem úsztam meg a replace-t, de persze a jó megoldás úgyis akkor születik, ha majd modulba pakolom.
Nyilván senkit nem biztatnék eme megoldás használatára. :)

Sajnos még nem tartok ott Drupalból, hogy csuklóból ugyanolyan könnyedén használjam pl. a Form API-t, mint amilyen gyorsan saját kódot "ragasztok" hozzá AJAX-os kommunikációhoz.
Az oldal egy totálisan JS-alapú részéhez volt szükség erre. Az oldal egyes részeit frissítem AJAX-szal, szerveroldalról JSON-ben adom vissza az eredményeket. Az ehhez tartozó kliensoldali kódot elég áttekinthetően és rugalmasan módosíthatóan sikerült elkészíteni, plusz a szerveroldali rész is elég könnyen kezelhető, a saját fenti Drupalos bohóckodást leszámítva. Drupalban egyelőre nem írtam AJAX-szal tarkított modulokat a beépített eszközök segítségével. Lehet, hogy nem nehéz, de gyorsan volt szükség megoldásra, saját kóddal összehozni meg így volt a leggyorsabb.

Köszi még egyszer!

0
0
szantog képe

"de Drupal-modulba beépíteni több macera lett volna, mint amennyi idő alatt csináltam ennyit"

többször annyi időt fogsz eltölteni az ilyen és ehhez hasonló problémákkal. Ráadásul a kérdésekre csak úgy tudunk érdemi választ adni, hogyha feltételezzük, hogy rendeltetésszerűen van használva a drupal. Így kb hasonló "komoly" megoldásokat kapsz, mint amit pp írt.

4
0

----
Rájöttem, miért kérdezek olyan ritkán a drupal.hu-n. Amíg szedem össze az infokat a kérdéshez, mindig rájövök a megoldásra.

Sk8erPeter képe

Hali!
Neked is köszi a választ! (Szintén +1.)
Teljesen igazatok van, ez valóban egy gyorsmegoldásként született.
Ettől függetlenül szerintem tényleg komoly tanulási időbe telik, hogy az ember szépen tudja beépíteni a moduljába a saját kódját. A saját kódom ettől még lehet szép, én most ezt jó ocsmányan hoztam össze a Drupallal. :D
Az oka igazából az, hogy a Drupal AJAX-os megoldásait elsőre túl kacifántosnak találtam, míg saját JSON-ös adatkommunikációval (PHP json_encode(), jQuery AJAX API) valahogy ezerszer gyorsabban sikerült összehozni. És ha az ember időre dolgozik, olykor kénytelen randa megoldásokhoz folyamodni. A saját kód többi része természetesen nem ilyen okádék, csak maga a "híd" megteremtése sikerült ilyenre.

0
0