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!
kérdezzetek, ha nem tiszta
Ha nem teljesen világos, amit írtam, kérdezzetek!
(Miért nem lehet szerkeszteni a saját eredeti postot? -.-)
hát ha nem zavar, hogy ronda
hát ha nem zavar, hogy ronda akkor:
LOL
egyébként meg "ugyan pakold már bele egy modulba, vazze"
pp
Palócz István
https://palocz.hu | https://tanarurkerem.hu
jobbat én sem találtam :)
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.
$base_url ?
<gányolunk>
</gányolunk>
"ugyan pakold már bele egy modulba, vazze"
pp
Palócz István
https://palocz.hu | https://tanarurkerem.hu
Tökéletesen működő gányolás! :)
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!
"de Drupal-modulba beépíteni
"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.
----
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.
jogos
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.