Lucrul cu masa ta în mod

De mult timp nu au existat noi lecții. Să începem o serie nouă de experimente legate acum cu obiecte suplimentare în MODX. Acest lucru este adesea folosit, mai ales dacă doriți să stocați câteva informații suplimentare în baza de date. De exemplu, componenta Redirector stochează toate redirecționările într-un tabel separat. Și vom învăța să facem același lucru)







Dacă doriți să stocați date suplimentare într-un tabel suplimentar, trebuie să creați propriul program de completare. În MODX, add-on-urile se numesc componente sau pachete.

Să începem cu una simplă:

Site-ul are o pagină cu o hartă a Rusiei. Pe această hartă este necesară deducerea etichetelor în acele orașe în care există sucursale ale organizației noastre. Harta este realizată de o imagine, etichetele au o poziționare absolută. Toate nu ar fi nimic, dar organizația se dezvoltă rapid, apar noi ramuri și ar fi frumos să simplificăm adăugarea de etichete pe hartă.

Vom presupune că MODX ați instalat deja))) Am adăugat Consola. pentru a fi mai convenabil să experimentați, și CMPGenerator. care ne va ajuta să spunem MODX despre tabelul nostru suplimentar.

Coordonatele etichetelor vor fi stocate într-o tabelă separată, așa că mergeți la phpMyAdmin și creați un nou tabel modx_map_item cu următoarele câmpuri:

  • id - INT (10), AUTO_INCREMENT
  • titlu - VARCHAR (250), utf8_general_ci, NULL - da, Implicit - NULL
  • coord_x - INT (10), NULL - da, implicit - NULL
  • coord_y - INT (10), NULL - da, implicit - NULL

După aceasta, accesați panoul de administrare Components-> CMPGenerator. Faceți clic pe Creare pachet. Completați câmpurile: Numele pachetului - Harta Numele bazei de date - lăsați necompletat (sau scrie numele baza de date) Mese - Prefixul modx_map_item - modx_ Build Schema - Da Build - Pachet Da

și salvați. Totul, modelul este generat, toate datele despre masa noastră la MODX'a sunt. Poți să te uiți în / core / components / Map /

Deschideți Componente-> Consola și încercați să creați obiectul: Oops:

Clasa nu a putut fi încărcată: MapItem din mysql.mapitem.
Eroare fatală: Apelați la o funcție membru salvați () pe un non-obiect în / home /. /public_html/core/components/console/processors/exec.class.php(19). eval () 'codul de pe linia 3

Datele de la MODX'a - care este, dar el nu știe că o au)

Mergeți la setările de sistem și creați un nou parametru (dacă nu există deja) extens_packages. Completăm doar "cheia" (pachete_extensie) și "Valoare":

Dacă aveți deja ceva scris în acest parametru, trebuie să adăugați acest cod la sfârșit cu o virgulă, după cum urmează:

altfel alte componente se vor rupe)))

Puteți face acest lucru nu cu mâinile, ci acordați-vă dreptul la MODX. Pentru a face acest lucru, trebuie să executați următorul cod în Consola: și parametrul de sistem va fi setat corect.

Încercați din nou să creați un obiect. Nu există nici o greșeală. Du-te la phpMyAdmin și vezi că există o linie nouă. Felicitări, acum puteți lucra cu acest obiect nou folosind xPDO, ca și cu orice alt obiect MODX.

← Partea 5. Crearea și ștergerea obiectelor

Adăugați, editați și ștergeți personalizate. →

Crearea mesei tale este perfectă pentru sarcina mea. Dar când am creat o pereche de tabele în baza de date: «modx_order_item» și «modex_product_item», din moment ce este descris ca «Comanda» și «produse», respectiv, c prefixul «modx_», și în cele din urmă adăugați calea să-l în extension_packages, privit obiectul unui nume în schema: În teorie, totul a trebuit să fie câștigat corect, dar când încerci să fugi






Apare o eroare:
"Nu am putut încărca clasa: ProductItem din mysql.productitem."
versiunea modex "MODX Revolution 2.2.12-pl"
Cum pot convinge modx să-mi accepte mesele?

Multumesc pentru articol!
Sa constatat că pachetul de generare componente CMPGenerator prefix de masă, altele decât „modx_“, nu funcționează: primește date din baza de date și nu sunt reținute.
În orice caz, xPDO folosește prefixul "modx_".

Aceasta este, de exemplu, am un mecha_robot_makers de masă, am Wizard (în CMPGenerator) se introduce numele de masă și mecha_robot_makers prefix mecha_. În fragment, verificam numele tabelului utilizat în clasă:

$ myRow = $ modx-> newObject ("RobotMakers");
echo $ myRow -> _ tabel;

iar pagina afișează "modx_robot_makers".

Poate că am înțeles greșit semnificația prefixelor sau ce anume trebuie să fie introduse în câmpuri atunci când se generează un pachet.
A redenumit tabelul (a făcut prefixul modx_) și totul a funcționat.

Care este eroarea cu prefixul din generatorul CMP?

Numele tabelului ar trebui să aibă același prefix ca toate celelalte tabele. De exemplu, dacă toate tabelele din baza de date pornesc de la modx_. atunci tabelul personalizat ar trebui să pornească pe modx_. Prefixul este necesar, în măsura în care înțeleg, dacă sunt utilizate mai multe tabele personalizate. dar atunci prefixul ar trebui să fie modx_fgrx_

Iată o altă problemă. Mai întâi a făcut prefixul fgrx apoi observat și schimbat la fgrx_

În primul caz, am schimbat pur și simplu numele tabelului la fgrx_map_item, dar acest lucru nu este corect. Avem nevoie de undeva în setări să ne schimbăm. În setările generatorului, m-am schimbat înapoi la fgrx, fără modificări, aceeași eroare cu dubla subliniere.
joxi.ru/j1A59nQu8991AE
Numele tabelului este normal, de unde este nevoie de "underscore".

O zi bună, Ilya! Scuze pentru a ridica subiectul vechi.
Încerc să repet instrucțiunile, creez un tabel, fac un pachet în CMPGenerator. Schema este terminată, apare folderul. Apoi, în consola do $ modx-> addPackage ( 'Harta', $ modx-> getOption ( 'core_path') 'Componente / Harta / modelul /', 'modx_map_'.);

Dar când încerc să apel $ item = $ modx-> newObject ('MapItem');
$ item-> save (); în consolă, mă pricep
Clasa nu a putut fi încărcată: MapItem din mysql.mapitem.

Fac ceva în neregulă sau am schimbat ceva de la scrierea articolului?

Cum ar fi, nimic nu sa schimbat ... Este greu de înțeles ce greșeală ... Este necesar pentru a deschide folderul creat, trebuie doar să verificați modul în care, să acorde o atenție - în cazul în care scrisoarea de capital în cazul în care o literă mică. În general, acest fișier mysql.mapitem - există? În el ca un obiect este numit? Cu toate acestea, este posibil, în baza dvs., prefixul nu modx_. atunci trebuie să îl specificați în addPackage. Motivele pot fi stabilite

Ilya, seara bună. Vă mulțumesc foarte mult pentru articolele dvs. Suferi deja pentru a doua zi cu generatorul cm. Creez o placă de identificare în phpmyadmin conform instrucțiunilor de mai sus. Încep generatorul. Dosarele, căile și toate aceste hărți sunt create. Și apoi nici soțul bine. Obiectul nu are acces. În jurnalele scrie:
===
(EROARE @ /papka/assets/components/cmpgenerator/connector.php) Schema /home/u111/site.ru/www/papka/core/components/Map/model/Map/Map.mysql.schema.xml nu conține validă elemente de elemente.
===
Unde să săpați, care sunt motivele? Ajutor, te rog. Vreau să rețin că site.ru/www/papka este exact așa. Modx este instalat în subdirectorul papka. Și fișierele site-ului (celelalte) sunt în folderul site.source.com/www.
Mulțumesc.

Îmi cer scuze pentru nepăsare. A fost necesar să se înregistreze complet masa! MODX_map_item. În ciuda faptului că prefixul modx este scris mai jos. Vă mulțumim din nou. Mergând mai departe.

Ilia, salut, foarte bun Wikipedia, citește mai mult să vină, dar eu sunt în proces)). care nu se poate confrunta cu sarcina de a rezolva orice găsit pe net (poate fi rău în căutarea, sau pur și simplu nu sap) ... esența problemei este - am nevoie pentru a sincroniza 2 diferite site-ul MODX Revo (în special, este necesar să se sincronizeze cele două proprietăți din mărfurile care utilizate la schimba proprietățile pe un singur site, au schimbat și pe alte site-uri), atât pentru lucrătorii ... ar putea sugera, deși în ce direcție să sape, voi fi foarte recunoscător

Ei bine, teoretic, nu este nevoie să stocați directorul în ambele baze de date - trebuie să creați o pagină pe site-ul principal, cu un director, pe care să afișați toate produsele, de exemplu, sub formă de JSON. Iar la al doilea site, producția catalogului este scrisă independent - cu solicitarea datelor de la primul site, decodificarea și proiectarea JSON în conformitate cu designul.

Dar, dacă ați făcut deja două directoare trebuie să scrie un plugin care menținând în același timp mărfurile vor trimite o cerere către un alt site și un alt site ar trebui să răspundă la această solicitare - pentru a schimba câmpurile corespunzătoare. Acest lucru este mult mai dificil, deoarece va trebui să vă gândiți și la securitate, astfel încât să nu puteți să faceți o altă cerere de la un alt site sau să trimiteți manual o astfel de solicitare, iar toate site-urile să se întrerupă.







Articole similare

Trimiteți-le prietenilor: