Külső php osztály beágyazása cck mezőbe és a kód futtatása node beküldésekor

Dibusz Tamás képe

Kedves Emberek!

Adott egy fejlesztés alatt álló oldal (ld. alább), ami rendelkezik egy Ubercart alapú webáruházzal.

A megrendelő szeretné ezt kibőviteni egy másik cég adatbázisával, melyet CSV fájlként a rendelkezésünkre bocsát. Ez eddig egyszerű, a CSV-t beimportálom node-ként, majd viewssel előállítok belőle egy táblázatot. (http://mavigumi.hu/akh_stock)

A problémám a következő (nem vagyok valami tigris php fronton): A megrendelés leadásához egy php osztályt kaptam, melyet példányosítva adatokat vár (Megrendelő neve, Termékkód, Darabszám, stb.), ezt elküldi a szervernek, majd adatokat fogad, melyet nekem rögzíteni kellene. Az adat SimpleXML formátumban érkezik vissza.

Az általam elképzelt megoldás: A Megrendel gombra kattintva új node-ot hoz létre a felhasználó (saját tartalomtípus, megfelelő cck mezőkkel). A node reference segítségével megállapítom mely termékre kattintott, így megvan a termékkód. Bekérem a szükséges adatokat (Név, Cím, Darabszám), majd átadom a php kódnak.

A kérdéseim:
- Meg tudom-e oldani, hogy a php kód csak beküldés gombra kattinva fusson le? (esetleg button field-be ágyazva)
- Tudom- e cck mezőben rögíteni a visszakapott adatot? A mező értékének megadásakor ugyanis a "Nem az elvárt formátum" hibaüzenetet kapom (gondolom azért mert SimpleXML formátumban kapom vissza az adatot).
- Jó úton járok, vagy alapjaiban hibás az elképzelés?

Indokolatlanul borzató mértékű hála minden építő jellegű hozzászólásért.

Melyik modulhoz, modulokhoz kapcsolódik a téma?: 
Sk8erPeter képe

Bocs, de először a kérdésre további kérdéseket kell feltennem.
Bizonyára már késő van, és tompa vagyok, de most így elsőre nekem nem jött át: egyáltalán megfelelően Ubercartba, "saját" termékekként importáltad ezeket a tartalmakat?
A másik cég felé küldeni kell megfelelő adatokat valami web service-en keresztül? Vagy ilyen feladat nincs? Azért kérdezem, mert olybá tűnik, mintha teljesen különálló módon akarnád ezt kezelni az Ubercarttól, aminek az oka egyelőre számomra ismeretlen.
Egyébként persze, minden node-beküldésre pongyolán fogalmazva "rá lehet kötni" saját eseményt (a kódodat), de szerintem egy rendelés leadására node-ot létrehozni nagyon felesleges és erőforrás-pazarló megoldás.
Most hirtelen az is homályos, hogy miért egyetlen adott CCK-mezőbe akarsz "rögzíteni" adatokat (ha már így fogalmaztál, bár ez sem túl egzakt).
Eddig nekem erősen átgondolásra ítéltnek tűnik az elképzelésed (túl soknak tűnik a feleslegesnek látszó keverés-kutyulás), de ha ezeket kifejted egy kicsit, akkor talán tisztább lesz a kép.

0
0
Dibusz Tamás képe

Szia!

Köszönöm, hogy időt szánsz a problémámra.

Az Übercartos webáruház (A cég), és az idegen adatbázis (B cég) külön kezelődik. Ennek a készletkezelés, a különbőző formátum (más mezők és adatok) és a rendelések különböző kezelése az oka.

Az Übercart közvetlenül az eladóhoz fut be (A cég). A másik cég (B cég) termékei egy másik, hasonló listában jelennének meg (ld. link a témaindítóban), majd megrendeléskor a B cég által biztosított php osztályon keresztül kellene a megrendelést B cégnek eljuttatni (a további feldolgozást és a szállítást B cég intézi).

B cég termékeit nem Übercartba importálom, hanem saját tartalomtípusba. Ez naponta többször frissül. A letöltést és a frissítést megoldottam, a megjelenítést és a szűrőket Views-el szintén meg tudtam csinálni.

Az utolsó lépésnél, a megrendelés leadásánál akadtam el. B cég termékének adatait CCK mezőkben tárolom, ezt szeretném kiolvasni, és átadni php kódnak. A php két értéket ad vissza SimpleXML formátumban, ezeket kellene rögzítenem (rendelés visszaigazolás).

Arra gondoltam, hogy rendeléskor létrehozok egy node-ot (kvázi a megrendelő form), ahol CCK mezőkben tárolom a megrendelő adatait, a megrendelt termék adatait (típus, darabszám), illetve a php kód által visszaadott értékeket (megrendelés visszaigazolás).

Ebből később Views-el táblázatos formában meg tudom jeleniteni a megrendeléseket, tudom szűrni, rendezni, stb.

Nem tudom, ez kivitelezhető-e, illetve hogyan lehet megcsinálni. Saját modul fejlesztése php tudás hiányában egyenlőre nem jöhet szóba.

Remélem érthetően sikerült fogalmaznom.

Kellemes Ünnepet mindenkinek!

Üdv: Tamás

0
0
Sk8erPeter képe

Egy kicsit erre elfelejtettem reagálni, bocs.

Röviden és tömören: PHP-tudás hiányában ez a feladat nagyon nehéz. Igazából az ehhez készítendő modul nem is annyira lenne nehéz, mert ha jól értelmeztem, igazából már nagyjából megvan minden, ami kell, hogy működjön, egyedül a megrendelés ésszerű nyilvántartását nem sikerült megoldani.
Lehetne pont úgy csinálni, ahogy az Ubercart megoldja, hogy minden egyes termék egy-egy node, minden node-hoz tartozik egy form, amivel a megrendelést lehet intézni, és ezeknek a formoknak az elküldése kivált bizonyos eseményeket, amikre "fel lehet iratkozni" másik modulokkal is, így befolyásolható a működés - de ez igazából már a Drupal alapműködéséhez tartozik, nem is az Ubercartéhoz; utóbbi csak kihasználja ezeket a lehetőségeket.
A megrendeléseket viszont az Ubercart sem node-ok formájában tartja nyilván. Hiába az könnyen szűrhető Views-zal is, anélkül, hogy akár egy sort is kódolna az ember, tényleg erőforrás-pazarlás, főleg nagyszámú rendelésnél.
Tulajdonképpen elég lenne egy-két rendelés táblába felvinni az adatokat, ahogy az Ubercart is csinálja - felhasználóhoz kapcsolni, másik táblában meg nyilvántartja a részletes rendelési adatokat, stb...

Tudom, ez a hozzászólásom most olyan sokat nem lendített a feladatod megoldásában, mert eleve rögzítetted, hogy PHP-tudás hiányában nem fogsz tudni jelenleg modult fejleszteni, de én enélkül nehezen tudnám elképzelni - legalábbis szépen megoldva.
Amúgy ha mégis modulfejlesztésre adnád a fejed, ezeket ajánlanám:
6-oshoz:
John K. VanDyk: Pro Drupal Development, 2nd Edition
7-eshez:
Todd Tomlinson , John VanDyk: Pro Drupal 7 Development, 3rd Edition

Azért írd meg, ha jutottál valamire, kíváncsi vagyok, milyen megoldást találsz, hátha másnak is hasznos lesz!

0
0
Dibusz Tamás képe

lesz belőle... Tanulom a php-t, az alapokkal tisztában vagyok. Elkezdtem nézegetni a példakódokat, de még sok mindent nem értek.
Köszönöm az ötleteket,meg a linket. Amint elkészült a működő modul, leírom, hogyan sikerült megoldani.

1
0