Az asztal használata a modx-ban

Hosszú ideig nem voltak új tanulságok. Kezdjünk egy új kísérletsorozatot, amely most a MODX-ben található további objektumokkal kapcsolódik össze. Ezt gyakran használják, különösen, ha további információkat szeretne tárolni az adatbázisban. Például a Redirector összetevő minden átirányítást külön táblázatban tárol. És megtanuljuk ugyanezt tenni)

Ha további adatokat szeretne tárolni egy másik táblában, létre kell hoznia a saját bővítményt. A MODX-ben a kiegészítőket komponenseknek vagy csomagoknak nevezzük.

Kezdjük egyszerűen:

A webhelynek van egy oldala Oroszország térképével. Ezen a térképen le kell vonni a címkéket azokban a városokban, ahol szervezetünk fióktelepei vannak. A térképet egy kép készítette, a címkék abszolút helyzetben vannak. Nem lenne semmi, de a szervezet gyorsan fejlődik, új fiókok folyamatosan megjelennek, és jó lenne egyszerűsíteni a címkék hozzáadását a térképen.

Feltételezzük, hogy a már telepített MODX))). hogy kényelmesebb legyen a kísérletezés, és a CMPGenerator. amely segíteni fog nekünk mondani a MODX-nek a további táblázatunkról.

A címkék koordinátáit külön táblában tárolja, ezért lépjen be a phpMyAdmin-ba, és hozzon létre egy új táblát modx_map_item a következő mezőkkel:

  • id - INT (10), AUTO_INCREMENT
  • cím - VARCHAR (250), utf8_general_ci, NULL - igen, alapértelmezett - NULL
  • coord_x - INT (10), NULL - igen, alapértelmezett - NULL
  • coord_y - INT (10), NULL - igen, alapértelmezett - NULL

Ezután lépjen az admin panelre, majd a Components-> CMPGenerator menüpontra. Kattintson a Csomag létrehozása gombra. Töltse ki a mezőket: Csomag neve - Map Database Name - üresen hagyja (vagy írja be az adatbázis nevét) Táblázatok - modx_map_item Prefix - modx_ Build Séma - Igen Build Package - Igen

és mentse. Minden, a modell generálódik, az összes adat a MODX'a asztalán. Megtekintheti a / core / components / Map /

Nyissa meg a Compu- nents-> Console-t és próbálja meg létrehozni az objektumot: Hoppá:

Nem sikerült betölteni az osztályt: MapItem a mysql.mapitem-ből.
Halálos hiba: Hívja a tagfunkciót a () mentéshez egy nem objektumon a / home / -ban. /public_html/core/components/console/processors/exec.class.php(19). eval () 'd kód a 3. vonalon

A MODX'a adatai - vagyis, de nem tudja, hogy rendelkeznek vele)

Menjen a rendszerbeállításokhoz, és hozzon létre egy új paramétert (ha még nem létezik) extension_packages. Csak a "kulcs" (extension_packages) és az "érték"

Ha már van valami írva ebben a paraméterben, ezt a kódot vesszővel kell hozzáadni a végéhez:

egyébként más összetevők törnek)))

Ezt nem a kezével, hanem a MODX-nek is megadhatja a jogot. Ehhez az alábbi kódot kell végrehajtania a konzolon: és a rendszerparaméterek helyesen lesznek beállítva.

Most próbálkozz újra létrehozni egy objektumot. Nem hiba. Menj a phpMyAdmin-hoz, és nézd meg, hogy van egy új vonal. Gratulálok, most az új objektummal együtt dolgozhat az xPDO használatával, mint bármely más MODX objektumhoz.

← 5. rész Objektumok létrehozása és törlése

Egyéni, szerkeszthető és törlendő. →

Saját asztal létrehozása tökéletes a feladatomhoz. De amikor létrehozott egy pár táblák az adatbázisban: «modx_order_item» és «modex_product_item», mert le «Order» és a «termék», illetve, c prefix «modx_», végül adjuk hozzá a elérési útvonalát extension_packages, figyelte az objektum egy nevet rendszer: Elméletileg mindent meg kellett keresni helyesen, de amikor megpróbálsz futni
Hiba történt:
"Nem lehet betölteni osztály: ProductItem a mysql.productitem-ből."
a modx "MODX Revolution 2.2.12-pl" verziója
Hogyan tudom meggyőzni a modx-ot, hogy elfogadja az asztalaimat?

Köszönöm a cikket!
Kiderült, hogy a CMPGenerator komponensek csomagok előállításakor a "modx_" -től eltérő táblák előtagjai nem működnek: az adatok nem kaphatók az adatbázisból, és nem menthetők el.
Az xPDO minden esetben a "modx_" előtagot használja.

Vagyis van egy mecha_robot_makers táblázat, a létrehozó varázslóban (a CMPGeneratorban) megadom a mecha_robot_makers táblázat és a mecha_ előtag nevét. A kódrészletben megnézem az osztályban használt táblázat nevét:

$ myRow = $ modx-> newObject ('RobotMakers');
echo $ myRow -> _ táblázat;

és az oldal "modx_robot_makers" -t jelenít meg.

Talán félreértettem az előtagok jelentését, vagy pontosan mit kell megadnunk a mezőkben, amikor létrehozunk egy csomagot.
Átnevezte a táblát (a modx_ előtagot állította elő), és mindez működött.

Mi a hiba a CMP Generator előtagjában?

Az asztalnévnek ugyanaz az előtagja legyen, mint az összes többi táblázat. Például, ha az adatbázis összes táblája a modx_-ban indul. akkor az egyedi tábla a modx_-on induljon el. Előtagra van szükség, ha értem, ha több egyedi táblát használ. de az előtagnak modx_fgrx_

Itt van egy másik hiba. Először az fgrx előtagot észleltük, és fgrx_

Az első esetben egyszerűen megváltoztattam a táblázat nevét fgrx_map_itemre, de ez nem helyes. Szükségünk van valahová a beállítások megváltoztatására. A generátor beállításaiban visszaállítottam az fgrx-re, nincs változás, ugyanaz a hiba kettős aláhúzással.
joxi.ru/j1A59nQu8991AE
A táblázat neve normális, ahonnan az "aláhúzás" felesleges.

Jó nap, Ilya! Sajnálom, hogy felemeltem a régi témát.
Megpróbálom megismételni az utasításodat, létrehozok egy táblát, készítek egy csomagot a CMPGeneratorban. A program elkészült, a mappa megjelenik. Ezután a konzolban $ modx-> addPackage ('Map', $ modx-> getOption ('core_path'), 'Components / Map / model /', 'modx_map_');

De amikor megpróbálok $ item = $ modx-> newObject ('MapItem');
$ item-> save (); a konzolban kapok
Nem sikerült betölteni az osztályt: MapItem a mysql.mapitem-ből.

Valami rosszat csinálok, vagy valami megváltozott a cikk írása óta?

Úgy tűnik, hogy semmi sem változott ... Olyan nehéz megérteni, hogy mi a hiba ... Meg kell nyitnunk ezeket a létrehozott mappákat, csak hasonlítsuk össze a módokat, figyeljünk - ahol a nagybetűs kisbetű. Általában ez a mysql.mapitem fájl létezik? Benne, mint objektumnak hívják? Mégis lehetséges, hogy az előtag nem modx_ alapján van. akkor meg kell adnia az addPackage-ban. Az okok beállíthatók

Ilya, jó estét. Nagyon köszönöm a cikkeket. Már a második napot szenvedem a cm generátorral. A fenti utasítások szerint létrehoztam egy névtáblát a phpmyadminban. Elindítom a generátort. Mappák, útvonalak és minden ilyen térkép jön létre. És akkor sem a házastárs. Az objektum nem fér hozzá. A naplók írja:
===
(ERROR @ /papka/assets/components/cmpgenerator/connector.php) séma /home/u111/site.ru/www/papka/core/components/Map/model/Map/Map.mysql.schema.xml nem tartalmaz érvényes tárgyelemek.
===
Hol lehet ásni, mi az oka? Segítség, kérem. Szeretném megjegyezni, hogy a site.ru/www/papka pontosan ilyen. A Modx a papka alkönyvtárban van telepítve. És a webhely (a másik) fájljai a site.source.com/www könyvtárban vannak.
Köszönöm.

Elnézést kérek a gondatlanságért. A táblát teljesen be kellett jegyeznünk! MODX_map_item. Annak ellenére, hogy a modx előtag az alábbiakban olvasható. Köszönjük ismét. Mozgás.

Ilya, hello, nagyon jó Wikipedia akkor, tovább jönni, de én vagyok a folyamat)). amely nem szembesül a feladat megoldása bármi megtalálható a neten (lehet rossz külsejű, vagy csak nem megy ásni) ... lényege a probléma - azt kell szinkronizálni 2 különböző website MODx revo (különösen meg kell szinkronizálni a két tulajdonságokat az árut, hogy használt tulajdonságainak módosítása egyetlen honlapon megváltoztatták és a másik oldalon) helyszínek, mind a munkavállalók ... utalhat ugyan, hogy milyen irányba kell ásni, én nagyon hálás

Nos, elméletileg nem kell a könyvtárat tárolni mindkét adatbázisban - létre kell hoznia egy oldalt a fő webhelyen, egy könyvtárral, amelyen minden termék megjeleníthető, például a JSON formájában. A második oldalon pedig a katalógus kimenete önállóan íródott - az első helyről származó adatok kérésével, a JSON dekódolással és a tervezéssel összhangban.

De ha már két könyvtárat készítettél, akkor be kell írnod ​​egy plug-in-et, amely az áru mentésekor kérelmet küld egy másik webhelyre, és egy másik webhelynek reagálnia kell erre a kérésre - változtassa meg a megfelelő mezőket. Ez nehezebb, hiszen a biztonságot is meg kell fontolnia, nehogy egy másik webhelyről vagy manuálisan küldjön ilyen kérést, és minden a webhelyen törni.

Kapcsolódó cikkek