Ne fixăm umbraco cms, ca sursă de date, savepearlharbor

Publicul țintă. Sisteme care au nevoie de un CMS simplu care să nu afecteze soluția arhitecturală. (CMS, ca magazin de conținut, fără a genera formulare etc.)







Scopul acestui articol - în „2 cuvinte“ pentru a arăta modul în care puteți utiliza Umbraco CMS ca o sursă de date din care cererea principală independentă la nivel mondial (deoarece sursa în orice moment, poate fi înlocuită cu orice altă), cu alte cuvinte, modul de a face un CMS într-un proiect separat .

Cu ceva timp în urmă am aflat despre Umbraco CMS, care mi-a atras imediat atenția. Unul dintre principalele sale avantaje pentru mine a fost OpenSource-ul liber, cu tot ce implică. Design simplu și eficient, fundal simplu, o comunitate mare și o gamă largă de extensii gratuite sunt suficiente. O listă completă a avantajelor și dezavantajelor este disponibilă pe web. Am fost dezamăgit doar de două puncte:

  1. CMS face anumite pretenții cu privire la structura și platforma aplicației principale, rutare etc. Programarea în C # se limitează la scrierea comenzilor de utilizator.
  2. Pe baza primului punct, în momentul de față ultima versiune (4.10) nu poate fi utilizată cu ASV.NET MVC, pe care-l iubesc atât de mult. (Am văzut în versiunea de rețea a proiectului cu un "amestec de tip" - ASP.NET + ASP.NET MVC, dar de asemenea nu mi-a plăcut)

De asemenea, am vrut să utilizez CMS exclusiv ca un modul de gestionare a conținutului, datele pe care le-am putut obține doar prin conectarea a două biblioteci la orice alt proiect. Și, așa cum o înțeleg, Umbraco nu oferă o astfel de oportunitate de a muri. În plus, aș dori să scriu în mod independent aspectul paginilor, logica de legare a datelor în C #, să definească aspectul, să nu te grăbești cu xslt, pe care este construit umbraco ui-motor. După ce am petrecut ceva timp în căutare și nu găsisem nimic potrivit, trebuia să rezolv această problemă singur.

Este demn de remarcat, din motive de justiție, că unele funcții CMS vor fi inaccesibile din cauza faptului că cererea principală nu este integrată în ea. De exemplu: crearea și editarea paginilor, administrarea de teme, scripturi, macro-uri. În orice caz, implicit. Deci, dacă aveți nevoie de un CMS full-featured, în care clientul ar trebui să poată efectua toate aceste acțiuni, atunci această opțiune nu este prea potrivită.

Schema arata astfel:

Ne fixăm umbraco cms, ca sursă de date, savepearlharbor

Deci, mai întâi trebuie să faceți următoarele:
  • Creați un proiect cu un CMS, configurați-l și extindeți funcționalitatea acestuia într-o oarecare măsură.
  • Adăugați ansamblurile necesare pentru proiectul Web, configurați și scrieți câteva linii de cod.
  1. Crearea unui proiect CMS
    • Deoarece umbraco este scris în ASP.NET, în VisualStudio vom crea un proiect gol de tipul corespunzător (ștergem toate fișierele și folderele din acesta)
    • Instalăm în acest proiect "Umbraco Cms" de la NuGet.
    • Rulați proiectul - se deschide pagina de configurare Umbraco, unde o legăm la baza de date.






  • Extinderea lui Umbraco
    Context:
    Când se utilizează cms într-un proiect separat, există o nuanță semnificativă care necesită câteva gesturi suplimentare, și anume: deoarece este deja imposibil să faci ceva de genul umbraco.GetCurrentItem () într-o aplicație web. contextul său în cms nu este legat în nici un fel, avem nevoie cumva pentru a obține nodurile de care avem nevoie.
    Umbraco.API face posibilă acest lucru pe mai mulți parametri ai nodului, nici unul dintre care până la capăt nu garantează faptul că vom primi același nod sau vom obține ceva.

    S-ar părea că obținerea unui nod prin ID-ul său este soluția ideală - poate fi hardcoded ID-ul necesar și în liniște do uQuery.GetNode (int nodeId), dar Umbraco puse în aplicare de unități numerotate secvențial, și, după cum am înțeles, nu este pus în aplicare în cazul pachetului de instalare merzhing aceleași noduri. Prin urmare, pentru a minimiza activitatea asociată cu găsirea nodurilor potrivite în viitor, se aplică următorul mecanism:

    Figura arată implementarea comenzilor personalizate pentru Umbraco. Controlul este responsabil pentru atribuirea asociațiilor între nodurile cms și enum personalizat dintr-o aplicație web (DropDown este mapat la enum, nodul este selectat prin ContentPicker). Aceasta este cea mai simplă implementare a conceptului, adică În loc de enum, lista de nume de noduri poate avea orice structură și poate fi stocată nu numai în enum. De exemplu, dacă aveți nevoie să cunoașteți aproximativ 100 de noduri din aplicație și nu aproximativ 10 puncte, vă puteți gândi la ceva mai complicat. Apropo, în acest fel este posibilă implementarea localizării site-ului adăugând seturi de asociații pentru diferite culturi (arrow Ru-Ru). Înainte de a salva datele din ContentPicker obținem ID-ul real al nodului.

    De asemenea, cu o dorință puternică, puteți verifica dacă nodurile umbraco așteptate în aplicația web au dispărut, afișa avertismente, scrie e-mailuri și așa mai departe. anticipând apariția erorilor NotFound.

    Stocăm datele de asociere în baza de date Umbraco (de exemplu). În cel mai simplu caz, tabelul are următoarea structură:

    Ne fixăm umbraco cms, ca sursă de date, savepearlharbor

  • Configurarea unui proiect Web
    Acum, în ceea ce privește proiectul principal de consum. Pentru a prelua datele stocate prin cms prin api Umbraco, trebuie să faceți următoarele:
    • Copiați config \ umbracoSettings.config din rădăcina CMS la rădăcina proiectului web
    • Setați valoarea proprietății "XmlContentCheckForDiskChanges" în această config la true (opțională, dar va oferi posibilitatea de a "ridica" imediat modificările în cms)
    • Copiați cheile din cms web.config în proiectul web.config:
      • "UmbracoDbDSN" - calea spre baza de date cms
      • "UmbracoContentXML" este calea către fișierul xml în care cms stochează datele. Mai precis: acest fișier este localizat implicit în \ \ App_Data \ umbraco.config ". Există o nuanță. Dacă cms este localizat fizic pe un alt server, atunci soluția sarcinii necesită acțiuni suplimentare. Nu intru într-adevăr în mecanismul de caching al umbraco, dar cred că dacă aveți nevoie să cache fișierul, puteți să-l abandonați complet.
      • Adăugați referințe la următoarele ansambluri:
        • businesslogic.dll
        • cms.dll
        • controls.dll
        • interfaces.dll
        • umbraco.dll
        • umbraco.DataLayer.dll

        4. Accesul la date
        Dacă nu am ratat nimic, este suficient ca umbraco să funcționeze așa cum ar trebui. Pentru a obține nodul dorit, trebuie să-i cunoașteți ID-ul. Tot ce trebuie să faceți este să obțineți ID-ul dorit din tabela de asociere ItemsIdMap după numele elementului Enum și cultura, dacă există. De exemplu:

        Asta e totul. Un exemplu al acestui concept, în acest proces există nuanțe diferite, dar aceasta este o altă poveste - totul este rezolvat în momentul în care acesta sosește. De asemenea, remarcă faptul că el însuși nu a testat încă această soluție fie pentru toate posibilitățile, fie pentru performanță. Apropo, în acest caz, este convenabil să descărcați codul sursă Umbraco, să îl conectați temporar în locul ansamblurilor și să îl depanați, dacă există probleme ciudate, deoarece aplicarea CMS este atipică. În orice caz, deși îmi place această decizie mult mai mult decât să scriu placa de administrare cu propriile mâini.
        Vă mulțumesc pentru atenție!







      • Trimiteți-le prietenilor: