Egész jól haladok az új drupal oldalammal, aminek munkaváltozatát az adott domain egy alkönyvtárába telepítettem (akarmi.hu/drupal). Ha teljesen kész lesz, szeretném az egészet áthelyezni a főkönyvtárba, azaz az akarmi.hu alá. Ahogy egy adatbázis backupból látom, az eltárolt html kódokban a linkekbe "be van égetve" a "/drupal" alkönyvtár. Szerintetek mi a legegyszerűbb módja, hogy az áthelyezés után minden link jó helyre mutasson. Elsőre arra gondoltam, hogy csinálok egy adatbázis exportot, aztán a szöveges sql fájlban egy keresés-helyettesítéssel kiszedem a "/drupal" előtagot mindenből. Van ennél egyszerűbb mód is, illetve egyeltálán jó ez az elképzelés? Persze van egy a saját pc-men futó, hasonló felépítésű, lokális teszt rendszerem is, azon végülis ki tudok próbálni bármit..., csak azért kérdezek, hogy hátha létezik egy bevált megoldás erre a problémára.
Moving Drupal from subdirectory to directory
Ezt már végigolvastam: http://drupal.org/node/20853
van benne szó .htaccess ( #RewriteBase /drupal) megoldásról, ami elvileg lehet, hogy jó, csak az én rendszeremnek van egy olyan specialítása (jelenleg), hogy pl. az új drupal írások a régi (akarmi.hu/akarmi1/akarmi2/oldalx.html) oldalakról sima másolás-beillesztéssel kerültek át, ami azt a kényelmet biztosította, hogy pl. a képeket nem kellett átcipelni a drupal alá, hanem a régi oldalon maradtak, az a drupal oldalak ezekre linkelnek (nagyon sok képről van szó, egyelőre nem nagyon szeretnék ennek átcipelésével is megküzdeni..)
system/...
Milyen HTML kódok? Melyik modul égeti be? Rendesen viselkedő modulok az útvonalakat /system/... formában adják meg, pl. /system/files/images/kep.jpg — éppen azért, hogy hordozható legyen.
abszolút/relatív url-ek
Megnéztem a drupal adatbázis tábláinak exportjában, hol találok nem relatív hivatkozást ("/drupal" szöveg). Ezekben a táblákban:
- locales_source (rengeteg)
- node_revisions (ez gondolom a node-ok forrása: itt gyakorlatilag az összes tinymce-vel beillesztett link)
- watchdog (ez gondolom a napló, azaz ez nem érdekes)
Szóval az első, ami problematikus, illetve a tinymce. Az elsőnél sajnos nem tudom, hogy ki a hunyó, a tinymce-nél a találtam a tinymce.module-ban egy ilyet:
Lehet, hogy itt van elásva az eb, viszont a tinymce beállításainál nem találtam olyan lehetőséget, hogy ezt felül lehetne bírálni. Ahol hivatkoznak erre a változóra, ott kb. ilyenek vannak:
Szóval nyomozok még tovább, de ha valaki kapásból tudja, hogy hol kéne belenyúlnom ebbe, hogy minden relatív legyen, légyszi szóljon.. :)
+++
Próbaképp átírtam a "$init['relative_urls'] = 'false';" kódban az értéket true-ra, ez ahhoz az érdekes jelenséghez vezetett, hogy visszahozva egy korábban felvitt írást, és abban egy linket megnézve, relatív lett a link, és mikor elmentettem az írást újra, meg is maradt relatívnak a html kódban. Viszont sajnos az összes külső linkből (képek linkjei) is relatívot csinált, és el is rontotta egy szinnttel, így a képek nem látszottak (/akarmi/kepek/kep1.jpg-ből -> ../kepek/kep1.jpg lett, ami a browserben ilyen útvonallá lett: /drupal/akarmi/kepek/kep1.jpg és emiatt nem is jelenik meg a kép). Visszaállítva a fenti változót false-ra, behozva újra az oldalt, és elmentve, visszaállt az oldal.
At hiszem mégis marad az adatbázisban turkálás - bár nem tudom, hogy bele szabad-e nyúlni ebbe a node_revision táblába kívülről - nincs-e valamilyen ellenőrző összeg, vagy ilyesmi, amitől meggágyul majd az egész...
convert_urls?
TinyMCE FAQ 1.2
locales_source ne zavarjon
A locales_source-ban lévő webcímek csak akkor használatosak, ha exportálsz vagy importálsz valamit, lényegében nincs szerepük a webhely működése során. Bármit beírhatnál a webcímek helyére, akkor is menne minden jól.
mégsem olyan egyszerű
Köszönöm, már azt hittem, hogy ezzel a segítséggel megoldható, de aztán rájöttem, hogy mégsem olyan egyszerű. Ugyanis ha pl. egy href="/drupal/node/61" linket relatívvá teszek, azaz href="node/61"-et írok helyette, és mondjuk ez a link a "/drupal/node/60" oldalon helyezkedik el, akkor a böngésző az utolsó "/" utánra fogja tenni a relatív részt, azaz a teljes cím ez lesz: "/drupal/node/node/61" - ami nyilvánvalóan hibás. Ebből viszont az következik, hogy amíg a "/drupal" alkönyvtár alatt építgetek, addig szükséges, hogy a belső címek is abszolút ide mutassanak, azaz kell eléjük a "/drupal/". Sajnos ez azt is jelenti, hogy az áttelepítéskor kénytelen leszek átnézni oldalakat és átírni az ilyen linkeket, ha van bennük. Jól gondolom?
+++
frissítés: Viszont ha csak a "61"-et írom be, mint relatív url-t, akkor jó... :) Lehet, hogy így fogom csinálni - bár mondjuk közben az is felmerült bennem, hogy ha (majd) nevesítem a node-okat (pl: "akarmi/oldal"), akkor megint ugyanott tartok.. :(
kell a perjel
Helyesen: a href="/node/61"
Ilyenkor a Drupal okosan elé írja a base_href értékét.
ez volt a kiindulás
Igen, ebből indultunk ki, és épp ez volt a migráció szempontjából a problémám. A node_revisions tábla body oszlopába, azaz az eltárolt html kódba ilyen formában kerül be a link: href="/drupal/node/61", ha ezt adom meg: "/node/61". Csináltam egy próbát: a lokális gépemre, a "localhost/drupal" könyvtárba telepített rendszer nevét átneveztem "dru"-ra, aztán egyedül a .htaccess-ben módosítottam a RewriteBase értékét, és gyönyörűen bejött a főoldal, sőt a menü v. bármelyik a drupal által standard módon generált link működött (nem meglepő, mivel az adatbázisban ezek a linkek tényleg relatívként tárolódnak) - egyetlen kivétel volt: az oldalak forrásába, a tinymce-vel beillesztett linkek, amik ugye megmaradtak eredeti formájukban, és emiatt rossz helyre is mutattak.
Szerencsére ez a teszt bebizonyította, hogy nagy valószínűséggel tényleg csak ezeket a linkeket kell majd a migrációnál módosítani, és hogy hol vannak ilyenek, az egy adatbázis exportból könnyen és gyorsan kiszűrhető (node_revisions tábla).
Azért köszönöm az ötletet, mert ez is hozzájárult, hogy élesedjen a kép.. :)