Сайн байцгаана уу, эрхэм уншигчид. Сүүлийн хичээл дээр бид сайтыг зарим контентоор дүүргэсэн (), одоо цаг нь болсон цэсэнд байгаа бүх зүйлийг харуулахИнгэснээр хэрэглэгчид тэдгээр рүү шилжих боломжтой болно.

Динамик үүсгэх MODX дахь цэсБид хэсэгчилсэн хэсгийг ашиглах болно PdoMenuбагцаас pdoTools. Эхлэхээсээ өмнө үндсэн баримт бичгийг уншина уу.

pdoMenu баримтжуулалт

Сонголтууд

Загварын сонголтууд

CSS ангийн сонголтууд

Албан ёсны жишээнүүд


Та албан ёсны баримт бичгийг эндээс уншиж болно. Одоо хамгийн энгийн цэсийн дуудлагуудыг харцгаая.

PdoMenu руу залгана уу

Сонголт 1. Энэ статик цэсийн оронд pdoMenu хэсгийг дуудна уу, үүний тулд нөөцийн мод, " таб дээр Элементүүд” хэсэг дэх хэсэг дэх утгыг өргөжүүлнэ үү pdoTools, дараа нь товшино уу pdoMenuхулганы зүүн товчийг дарж (товчлуурыг бүү суллаарай) энэ хэсгийг цэсийг нээхийг хүссэн газар руу чирээд нээгдэх цонхонд шаардлагатай параметрүүдийг бөглөж, "" дээр дарна уу. Хадгалах«.

Сонголт 2. Бид дуудлагаа гараар бичдэг.

Ердийн жишээнүүд

Тогтмол нэг түвшний цэс

Жишээлбэл, бид дараах html тэмдэглэгээ бүхий хамгийн нийтлэг цэстэй.

Үр дүн нь цэс рүү залгах дараах код юм.

  • &parents=`0` — эцэг эхийн жагсаалт (миний хувьд би сонголтыг хязгаарлахгүй, учир нь би ямар ч байсан зөвхөн гаргана. тодорхой хуудсууд);
  • &level=`1` — үүрлэх түвшин (энэ тохиолдолд байхгүй);
  • &resources=`2,3,4,5` — цэсэнд харуулах шаардлагатай нөөцийн жагсаалт;
  • &firstClass=`0` — цэсийн эхний зүйлийн анги (аль нь биш);
  • &lastClass=`0` — анги сүүлчийн цэгцэс (ямар ч биш);
  • &outerClass=`top-menu` — цэсний ороосон анги (ul-д орлуулсан);
  • &hereClass=`current-menu-item` — идэвхтэй цэсийн зүйлд зориулсан анги (li-д орлуулсан);
  • &rowClass=`цэсийн зүйл` - цэсийн нэг мөрийн анги (li-д орлуулсан).

Хоёр түвшний захиалгат ачаалах цэс

Статик html кодиймэрхүү харагдаж байна:

Түүний гаралтын код дараах байдалтай байна.

Мөн дараагийн хичээл дээр би bootstrap дээр суурилсан унждаг цэсийн хэд хэдэн гаралтыг өгөх болно (мөн энэ нь мөн чанарыг ойлгоогүй хүмүүст зориулагдсан юм. За, тэгвэл бид үүнийг хийх болно.

Эхлээд харахад бүх зүйл төвөгтэй мэт санагдаж байна, гэхдээ тийм биш, баримт бичгийг илүү дэлгэрэнгүй уншина уу, сэтгэгдэл дээр асуулт асуугаарай, би мэдээж туслах болно.

Та MODX хяналтын самбарын дээд цэсийг зүйлийн дарааллыг өөрчлөх эсвэл заримыг нь тодорхой хэрэглэгчдээс нуух замаар өөрчилж болно. Та мөн байгаа зүйлс дээр шинэ зүйл нэмж болно хувийн үйлдэл, таны үүсгэсэн. Дараа нь бид эхлээд дээд цэсийг өөрчлөхөд ашигладаг аргуудыг, дараа нь зарим практик жишээг авч үзэх болно.

Дээд цэсний үзэл баримтлал

Revolution дахь цэсийн систем нь цоо шинэ архитектуртай. Зарим зүйлийн нэрсийг эс тооцвол Evolution цэсний системтэй бараг ямар ч нийтлэг зүйл байхгүй. Цэсийг өөрчлөхийн тулд та ойлгох шаардлагагүй шинэ системцэс, гэхдээ энэ ойлголт нь ажилд тусалдаг, ялангуяа та бүтээх гэж байгаа бол Хувийн хуудсуудцэсээр дамжуулан хандах боломжтой хяналтын самбарууд.

Дээд цэсний мод

Дээд цэсний хэсэгт очно уу Систем -> Үйлдлүүдмөн та цэсийн системийн үндсийг харах болно. Баруун талд байгаа мод (Дээд цэс) цэсийн бодит зүйлүүд болон дэд цэсүүдийг агуулна. Хэрэв та янз бүрийн хэсгүүдийг өргөжүүлбэл энэ нь дээд цэсний яг хуулбар гэдгийг харах болно. Элементүүд дээд түвшинЭнэ бол хяналтын самбарын дээд хэсэгт харагдах зүйл юм. Эдгээр нь бараг үргэлж дэд цэсэнд зориулсан сав юм. Модны дэд цэс бүр нь хяналтын самбар дээрх үйлдэлтэй тохирч байна. Дэд цэс дээр дарахад хяналтын самбарт үйлдэл хийгддэг (жишээлбэл, сайтын кэшийг цэвэрлэх эсвэл хандалтын хяналтын самбар руу очих). Үнэн хэрэгтээ дээд цэсийн зүйл нь үйлдэл байж болох ч дээд цэсийн аль нь ч ийм байдлаар тохируулагдаагүй болно.

Цэсийн зүйл дээр дарахад юу тохиолдохыг энд тодорхойлсон болно. Таны харж байгаагаар та цэсийн зүйл дээр дарахад юу тохиолдохыг хялбархан өөрчлөхөөс гадна цэсийн жагсаалтын нэрсийг өөрчлөх, нуух, устгах боломжтой. Та цэсэнд зүйл нэмж, дээр нь дарахад юу болохыг тохируулах боломжтой. Үнэн хэрэгтээ, та одоо байгаа нэгийг орлох хяналтын самбарт цоо шинэ цэсийн системийг үүсгэж, өөр өөр хэрэглэгчид өөр өөр цэсийг харах боломжтой. Энэ бүгдийг MODX цөмийг өөрчлөхгүйгээр хийж болно.

Цэсийн физик дэлгэцийг мөн энд тохируулсан. Цэсийн бүх зүйл дээд цэсэнд байгаатай ижил дарааллаар байгаа нь санамсаргүй хэрэг биш юм. Хэрэв та тэдгээрийг модонд шилжүүлбэл хуудсыг дахин ачаалах үед дээд цэс өөрчлөгдөнө.

Хяналтын самбарын зарим үйлдлийг харцгаая, гэхдээ тэдгээрийг өөрчлөхөөс болгоомжил - тэдгээрийг үзсэний дараа "Цуцлах" товчийг дарна уу.

Баруун талд байрлах модны (Дээд цэс) дээр дарна уу баруун товшино уу"Сайт" зүйл дээр гарч ирэх цэснээс "Засварлах" гэснийг сонгоно уу. Засварлах харилцах цонх нь цэсийн үйлдлийг тодорхойлсон талбаруудтай гарч ирнэ:

Нэр- цэсийн нэр

Тодорхойлолт- цэсийн зүйлийн тайлбар

Үйлдэл- гүйцэтгэх PHP файлын тодорхойлолт

Дүрс- цэсийн нэмэлт дүрс

Сонголтууд- URL-д зориулсан нэмэлт $_GET параметрүүд

Ажиллагч- Гүйцэтгэх JS код

Хандалтын эрх- шаардлагатай нэвтрэх эрхийн таслалаар тусгаарлагдсан жагсаалт

"Сайт" хэсгийн ихэнх талбарууд хоосон байгааг анхаарна уу. Учир нь энэ нь дотор нь агуулагдах дэд цэсүүдэд зориулсан сав юм. Хэрэв та дээд цэсний "Сайт" цэс дээр дарвал юу ч болохгүй.

Ямар нэг зүйл хийдэг цэсийн дэд хэсгийг харцгаая. Харилцах цонхыг дуусгахын тулд "Цуцлах" дээр дарж, баруун талын самбарын модны "Сайт" хэсгийг өргөжүүлж, "Сайтыг шинэчлэх" дэд цэс дээр хулганы баруун товчийг дараад "Засах" гэснийг сонгоно уу.

Нээгдэх харилцах цонх нь "Хариуцагч" ба "Хандалтын эрх" талбаруудын агуулгыг агуулж байгааг анхаарна уу. Зөвшөөрлийн талбар нь хэрэглэгч хоосон_cache хандалтын эрхгүй л бол энэ цэсийн дэд зүйлийн үйлдлийг гүйцэтгэх боломжгүй гэдгийг бидэнд хэлдэг. Handler талбар нь таныг энэ дэд зүйлийг сонгоход хийгдэх бодит JS кодыг агуулна. Зарим үйлдлийг бодитоор хийж байгаа бүх зүйлд "Үйлдэл" эсвэл "Хариуцагч" талбарыг бөглөсөн байна. Хэрэв "хариуцагч" талбарыг бөглөсөн бол энэ талбарт байрлах кодыг гүйцэтгэх бөгөөд "Үйлдэл" талбарыг үл тоомсорлодог. Хэрэв "Хариуцагч" талбарыг бөглөөгүй бол "Үйлдэл" талбарын үйлдлийг гүйцэтгэнэ. "Үйлдэл" талбар нь ихэвчлэн хянагч файл эсвэл зүүн талд байрлах "Үйлдэл" модны аль нэг үйлдлүүдийн аль нэгийг заадаг (үнэндээ харгалзах хянагч файлуудыг заадаг). "Цуцлах" товчийг дарж харилцах цонхыг хаа.

Үйлдэл бүхий цэсийн зүйлийн хувилбарыг авч үзье. Багцын менежментээр Batcher нэмэлтийг татаж аваад суулгаад хуудсыг дахин ачаалаад хэсэг рүү дахин очно уу Систем -> Үйлдлүүд. Баруун талын модны "Бүрэлдэхүүн хэсгүүд" хэсэгт (шаардлагатай бол өргөжүүлнэ үү) Batcher дээр хулганы баруун товчийг дараад "Засварлах" гэснийг сонгоно уу. Одоо бид "Action, "Handler" биш харин бөглөсөн талбарыг харж байна: batcher - index. "Цуцлах" товчийг дарж засварлах харилцах цонхыг дуусгана уу.

Зүүн талд байгаа бүх дээд түвшний зүйлүүд нь нэрний орон зай юм. Зүүн талд байгаа Үйлдлийн модноос "бөглөх" нэрийн талбарыг өргөжүүлнэ үү. Та үйлдлийн индексийг харах ёстой. Энэ бол бидний баруун талын самбарт харсан Batcher цэсэнд заасан үйлдэл юм.

Топ цэсийн модоор юу хийж болохыг харцгаая. Топ цэсийн мод дахь зүйлсийг чирснээр дахин цэгцэлж болно. Хэрэв та модны цэсний байршлыг өөрчилбөл жинхэнэ дээд цэс өөрчлөгдөх боловч үүнийг харахын тулд Control Panel хуудсыг дахин ачаалах шаардлагатай болно.

Дээд цэсэнд зүйл нэмэхийн тулд та модны хэсгийн аль ч хэсэгт хулганы баруун товчийг дараад "Нэмэх" гэснийг сонгож болно. цэсийн зүйл". Дээд түвшний цэсэнд зүйл нэмэхийн тулд та "Зүйл нэмэх" товчийг дарж болно.

Цэсийн зүйлүүдийг хулганы баруун товчийг дараад "Устгах" гэснийг сонгоод устгаж болно. Хэрэв та цэсийн зүйлийг устгавал түүний талбаруудын агуулга алдагдаж, бүх хүүхэд элементүүд устах болно. Энэ үйлдэл нь эргэлт буцалтгүй юм.

Хэрэв та цэсийн зүйлийг устгахгүйгээр устгахыг хүсвэл (бараг үргэлж хамгийн сайн арга юм) Зөвшөөрлийн талбарт ямар нэг зүйл оруулснаар үүнийг нууж болно. Хэрэв энэ талбарт аль хэдийн ямар нэг зүйл байгаа бол таслал болон шинэ зөвшөөрлийн нэрийг нэмнэ үү. Энэ хандалтын эрх нь хэнд ч байхгүй нэвтрэх эрх юм бол цэсний зүйл харагдахгүй байх болно. Нэмэгдсэн зөвшөөрлийг устгаснаар та үүнийг дахин харагдуулах боломжтой. Хэрэв та тодорхой хэрэглэгчдэд цэсний тодорхой зүйлийг харуулахыг хүсвэл (гэхдээ хүн бүрт биш) зөвхөн хэрэглэгчийн хандалтын эрхийг агуулсан бодлогын шинэ загвар үүсгэж, тэр загвар дээр үндэслэн шинэ бодлого үүсгэж, тэдгээрт хамаарах контекст ACL оруулгыг үүсгээрэй. хэрэглэгчид болон энэ бодлогыг оноох.

Дээд цэсний гарчгийг өөрчлөхийн тулд түүний тайлбарыг зааж өгнө үү. Дараа нь цэсийн хэсэг рүү очно уу Систем-> Толь бичгүүдийг удирдах."Үндсэн" нэрийн орон зай болон "дээд цэс" сэдвийг сонгоно уу. Сэдвийн унадаг жагсаалт нь нэгээс олон хуудас агуулж байгаа тул та "topmenu" сэдвийг олохын тулд хоёр дахь хуудас руу орох шаардлагатай байж магадгүй юм. Хүссэн цэсийн зүйлийн хэлний мөрийг олоод утгыг нь давхар товшоод өөрчилнө үү. Таны энд хийсэн аливаа өөрчлөлт MODX-ийн хувилбарыг сайжруулсны дараа болон гуравдагч талын бүрэлдэхүүн хэсгүүдийг сайжруулсны дараа хүчинтэй хэвээр байх болно.

Дээрх арга нь зөвхөн цөмд суулгасан цэсийн зүйлүүдэд л ажиллана. Гуравдагч этгээдийн цэсийн зүйлсийн хувьд та тохирох нэрийн орон зайг сонгох хэрэгтэй. Жишээлбэл, хэрэв та Batcher-ийн харгалзах цэсийн зүйлийг өөрчлөхийг хүсвэл багцын нэрийн талбарт толь бичгийн хяналтын мөрийн утгыг өөрчлөх шаардлагатай болно.

Үйлдлийн мод

Хэсэг рүү буцах Систем -> Үйлдлүүд, хэрэв та үүнийг орхисон бол. Зүүн талын самбарт "багшлагч" нэрийн доор байрлах "индекс" үйлдэл дээр товшоод доош унах жагсаалтаас "Засварлах" гэснийг сонгоно уу. Энэ нь баруун талын самбар дээрх Batcher цэсийн зүйлээр заасан үйлдэл гэдгийг санаарай. Та энэ үйлдлийн хянагч нь индекс, нэрийн зай нь багц байх болно. Хэрэв бид одоо хэсэг рүү очвол Систем-> Нэрийн орон зай, бид багцын нэрийн зайд зориулсан зам дараах байдалтай байхыг харах болно.

(үндсэн_зам) бүрэлдэхүүн хэсэг/багсрагч

Энэ цэсийн зүйл дээр дарахад хэрэгжих хянагчийн холболттой бол MODX дараах байдлаар бүрэн замыг үүсгэнэ.

namespace_path + controller_name + .php

Өөрөөр хэлбэл, цөм нь анхдагч байршилд байгаа гэж үзвэл MODX нь хянагч файлын гүйцэтгэлийг дараах хаягаар эхлүүлнэ:

core/components/batcher/index.php

Хэрэв та энэ файлыг харвал core/components/batcher/controllers лавлах доторх index.php файлыг агуулж байгаа бөгөөд энэ нь Batcher классыг ачаалж, удирдлагын самбарт Batcher-ийг ажиллуулж эхэлдэг. Хэсэг хугацааны дараа бид тусгай хяналтын самбарын хуудас үүсгэх үед Бүрэлдэхүүн хэсгүүдийн цэсийн шинэ зүйлийг үүсгэх болно.

Баруун талын цэсний олон зүйлд зүүн талд харагдах идэвхтэй үйлдлүүд байдаггүй. Энэ нь тэдний хянагч файлуудын замууд MODX мэдээллийн санд хадгалагддаг тул засварлах ёсгүй (ядаж үүнийг хийхэд илүү хэцүү байдаг) учраас ийм зүйл тохиолддог. Эдгээр замууд нь modx_actions хүснэгтэд хадгалагддаг. Үйлдэл бүр өөрийн танигч (ID) болон хянагч руугаа хүрэх замтай байдаг. Уг үйлдэл нь хянагч болон бусад хэд хэдэн талбар идэвхтэй үед контекст мэдрэмтгий тусламж үзүүлэх туслах URL-тай. Зүүн талд байгаа Үйлдлүүд хэсэгт харагдах үйлдлүүдийн хувьд та үйлдлийн нэрний хажууд хаалтанд ID-г харж болно.

Хяналтын самбар дээрх аливаа үйлдэлд цэсийн зүйл нэмэх нь баруун талын самбарт цэсийн зүйл үүсгэж, харгалзах үйлдэл (хянагч) үүсгэх эсвэл зохицуулагч нэмэх замаар хийгддэг. Хэрэв хянагч аль хэдийн байгаа бол та үүнийг "Үйлдэл" цэснээс сонгох боломжтой. Хэрэв тийм биш бол та зүүн талын самбарт хянагч руу чиглэсэн үйлдлийг үүсгэх хэрэгтэй. Жишээлбэл, шинэ хэрэглэгч үүсгэх цэсийн зүйл байхгүй, гэхдээ үүнд зориулсан файл хянагч байгаа тул энэ зүйлийг дээд цэсэнд хялбархан нэмж болно. Энэ тохиолдолд та зөвхөн баруун талд цэсний зүйл үүсгэж, "үндсэн" нэрийн талбарт зориулсан үйлдлийг аюулгүй байдал/хэрэглэгч/үүсгэх гэж тохируулах хэрэгтэй. Таны ойлгож байгаагаар "Үйлдэл" модонд харгалзах үйлдэл байхгүй ("сайтыг шинэчлэх" цэсийн зүйл гэх мэт) зохицуулагчтай дээд цэсний зүйл. Зохицуулагч нь үүний кодыг агуулж байгаа тул түүнд Action зүйл хэрэггүй. MODX нь хянагчийг ажиллуулахын оронд зүгээр л зохицуулагч талбарт кодыг гүйцэтгэдэг.

Цэс дэх товшилтыг зохицуулах

Зүүн талд байгаа Batcher нэрийн талбарын индексийн үйлдлийг анхаарч үзээрэй. Түүний ID-г тэмдэглэе. Та дээд цэсийн зүйл дээр дарахад MODX энэ ID-г хүлээн авна. Дараа нь энэ хуудасны URL нь хяналтын самбарт үүсгэгдэж, хэрэглэгч түүн рүү аваачна. Манай вэбсайт дээр энэ ID нь 79 байна. Дээд цэсний Batcher дээр дарахад хөтчийн хаягийн мөрөнд бид дараахыг харна:

http://site/manager/index.php?a=79

Хэрэв та "Batcher" цэсийн зүйл дээр дарвал ижил төстэй URL гарч ирэх бөгөөд тэнд Batcher үйлдлийн индексийнхээ ID-г харах болно. Хүсэлтийг зохицуулагч энэ URL-г хүлээн авах үед цэсний объект өгөгдлийн санд байгаа эсэх, хэрэглэгч үүнийг гүйцэтгэх зөвшөөрөлтэй эсэхийг шалгаж, тусламжийн URL-г тохируулж, энэ үйлдлийн удирдлагын файлыг гүйцэтгэдэг (хэрэв зохицуулагч байгаа бол дараа нь зохицуулагч JS кодыг гүйцэтгэнэ).

Дээд цэстэй ажиллах

Одоо бид MODX цэсийн зүйлүүд болон тэдгээртэй холбоотой үйлдлүүдийг хэрхэн зохицуулдгийг мэдэж байгаа тул хяналтын самбар дээрх дээд цэсийг өөрчилье. Хэрэглэсэн аргууд нь маш энгийн бөгөөд тэдгээрийг ашиглахын тулд MODX цэс/үйл ажиллагааны системийн дотоод механизмыг ойлгох шаардлагагүй.

Сайтыг шинэчлэх эсэхээс үл хамааран таны бүх өөрчлөлт хүчинтэй байх тул энд болгоомжтой байгаарай. энгийн аргаүндсэн цэс рүү буцах. Бидний энд хийх ихэнх алхмуудыг буцаах боломжтой, гэхдээ та өөрчлөлт хийхээсээ өмнө анхны цэсийн бүтцээ бичихийг хүсэх болно. Эхлээд дасгал хийсэн нь дээр MODX суулгац, үүнийг энэ сайтад ашиглахгүй.

Цэсийн зүйлсийн дарааллыг өөрчлөх

Та хяналтын самбар дээрх дээд цэсийн зүйлсийн дарааллыг эсвэл тэдгээрийн дэд цэсийн аль нэг зүйлийн дарааллыг өөрчилж болно. Хэсэг рүү оч Систем->Үйлдэлбаруун талд байгаа цэсийн модыг өргөжүүлнэ үү ("Дээд цэс" гарчгийн доор).

Өмнө нь олж мэдсэнээр энэ мод нь хяналтын самбарын дээд цэсний үндэс суурь юм. Та дээд цэсийн зүйлсийн дарааллыг чирж өөрчлөх боломжтой. Зөөх гэж буй цэсийн зүйл дээр дарж, хулганын товчийг удаан дарж хүссэн газар руугаа зөөж, хулганы товчийг суллана уу. Ингэснээр та дээд цэсийн зүйл эсвэл аль нэг дэд цэсийн дарааллыг өөрчилж болно. Та зүйлсийг нэг дэд цэсээс нөгөө рүү шилжүүлэх боломжтой. Та мөн дээд цэсний хавтас руу чирж дэд цэсийн зүйлсийг дээд цэс рүү зөөж болно. Өөрчлөлтүүдийг харахын тулд хяналтын самбарын хуудсыг дахин ачаалах хэрэгтэй.

Цэсийн зүйл нэмэх, хасах

Цэсийн шинэ зүйл нэмэх нь маш энгийн. Хэсэг рүү оч Систем->Үйлдэлбаруун талд байгаа цэсийн модыг өргөжүүлнэ үү ("Дээд цэс" гарчгийн доор). Цэсний зүйл нэмэхийг хүсч буй хэсгийг сонгоод "Цэс нэмэх" товчийг дарна уу (эсвэл хулганы баруун товчийг дараад "Цэс нэмэх" гэснийг сонгоно уу). Шаардлагатай цэсний нэрийг оруулаад "Хадгалах" товчийг дарна уу. Ихэвчлэн MODX хэрэглэгчид Бүрэлдэхүүн хэсгүүдийн цэсэнд шинэ зүйл нэмдэг боловч та тэдгээрийг хаанаас ч нэмж болно. Цэсийн зүйлийг устгахын тулд хулганы баруун товчийг дараад "Цэсийн зүйлийг устгах" гэснийг сонгоно уу.

Хэрэв та шинэ цэсийн зүйл нэмээд хөтчөө дахин ачаалбал дээд цэсэнд шинэ цэсийн зүйл харагдахгүй байж магадгүй. Хүүхэд элементгүй, үйлдэл эсвэл зохицуулагчийг заагаагүй дээд цэсийн зүйлүүд цэсэнд харагдахгүй. Ийм учраас таныг MODX Revolution-ийг анх суулгахад мод дээр харагдаж буй Бүрэлдэхүүн хэсгүүдийн цэс цэсэнд харагдахгүй байгаа - хараахан ямар ч бүрэлдэхүүн хэсэг суулгаагүй байна.

Энгийн жишээ болгон, таныг хяналтын самбарынхаа хамгийн их ашиглагддаг хэсгүүдэд хүргэх шинэ захиалгат цэс үүсгэцгээе. Таны ажил системийн тохиргоо, баримт бичиг үүсгэх/засварлах, хандалтын хяналт зэрэгт байнга зочлох шаардлагатай гэж бодъё. Бид "Миний цэс" гэсэн дээд цэсийг үүсгэх бөгөөд үүнд заасан зүйлсийг байрлуулах болно. Бид бүх ажлыг баруун талын самбарт хийх болно гэдгийг анхаарна уу (Дээд цэс).

Хэсэг рүү оч Систем->Үйлдэлболон (дээд цэсний мод дээр) "Цэс нэмэх" товчийг дарна уу. "Нэр" талбарт "Миний цэс" гэсэн нэрийг оруулаад "Хадгалах" товчийг дарна уу.

Нэр - Шинэ баримт бичиг

Үйлдэл-үндсэн нөөц/үүсгэх

Нэр- Системийн тохиргоо

Үйлдэл- үндсэн систем/тохиргоо

Нэр- Хандалтын хяналт

Үйлдэл- үндсэн аюулгүй байдал/зөвшөөрөл

Таны гурван шинэ цэс миний цэсийн дэд зүйл байгаа эсэхийг шалгаарай. Хэрэв тийм биш бол тэдгээрийг хулганаар хүссэн газар луу чирнэ үү. Та мөн цэс болон дэд цэсийн дарааллыг өөрчилж болно.

Хүссэн цэсийн зохион байгуулалтад хүрсэний дараа хөтөч дээрээ хяналтын самбарын хуудсыг дахин ачаална уу. Та дээд цэсэнд хяналтын самбарын харгалзах хэсгүүдэд хүргэх гурван дэд цэс агуулсан Миний цэсийн шинэ зүйлийг харах ёстой.

Хэрэв та өөрийн үүсгэсэн цэсийн зүйлийг устгахыг хүсвэл зүгээр л очно уу Систем->Үйлдэл, тэдгээр дээр хулганы баруун товчийг дараад "Устгах" гэснийг сонгоно уу. Мэдээллийн санд үлдэхгүйн тулд үндсэн цэсийн зүйлийг устгахын өмнө бүх дэд цэсүүдийг устгах нь зүйтэй.

Цэсийн зүйлсийг хэрхэн нуух вэ

Цэсийн зүйлийн дарааллыг өөрчлөхөөс гадна цэсийн зүйлд хавсаргасан зөвшөөрлийг ашиглан тэдгээрийг нуух боломжтой. Хэсэг рүү оч Систем->Үйлдэлцэсийн модыг өргөтгөх баруун тал("Дээд цэс" гарчиг дор).

Цэсийн аль нэг зүйл эсвэл дэд зүйл дээр хулганы баруун товчийг дараад "Засварлах" гэснийг сонгоно уу. "Зөвшөөрөл" доод талбар бүхий харилцах цонх гарч ирнэ. Өөр талбарыг өөрчлөхөөс болгоомжил.

Хэрэв та одоо байгаа цэсийн зүйлийг нуухыг оролдвол тэдгээрийн зарим нь Зөвшөөрлийн талбарыг бөглөж, заримыг нь бөглөөгүй байгааг харах болно. Талбарыг нуухын тулд ямар арга хэмжээ авах нь тухайн талбарыг бөглөсөн эсэхээс хамаарна.

Хэрэв Хандалтын эрхийн талбарт хандалтын эрхийн жагсаалт байгаа бол та хандалтын эрхийг хаахын тулд шинэ хандалтын бодлогыг үүсгэж (эсвэл одоо байгаа нэгийг нь засаж болно) цэсийн зүйл нуугдах болно. Хяналтын самбар дээрх бусад цэсийн зүйлүүд ижил зөвшөөрлөөс шалтгаалж болох тул энэ үйлдэл нь гаж нөлөө үзүүлж болзошгүй. Хамгийн сайн аргаЭнэ талбарт хэрэглэгчийн зөвшөөрлийн нэмэлт үзүүлэлтүүдийг нэмж оруулах боломжтой.

Зөвшөөрлийн талбар нь таслалаар тусгаарлагдсан хандалтын эрхийн жагсаалтыг агуулж болно. Энэ цэсийн зүйл нь зөвхөн жагсаасан бүх хандах эрхтэй хэрэглэгчдэд харагдах болно.

Нэг жишээ авч үзье. Хязгааргүй Супер хэрэглэгчийн эрхтэй хэрэглэгчээс бусад бүх хэрэглэгчдээс "Аюулгүй байдал" цэсийн "Хэрэглэгчийн удирдлага" дэд цэсийг нуух шаардлагатай гэж бодъё.

Хэсэг рүү оч Систем->Үйлдэлцэсийн модыг өргөжүүлж, "Хэрэглэгчийн удирдлага" дэд зүйл дээр хулганы баруун товчийг дараад "Засварлах" гэснийг сонгоно уу. Зөвшөөрлийн талбар нь view_user-г агуулсан байх ёстой. Бид my_view_user_menu нэртэй өөр зөвшөөрлийг нэмэх гэж байна. Үүнийг хийхийн тулд энэ талбарт харах_хэрэглэгч, миний_харах_хэрэглэгчийн_цэс агуулсан байхаар засварлана уу. Оруулсан өгөгдөлд хоосон зай байхгүй эсэхийг шалгаарай. Одоо хэрэглэгчид Хэрэглэгчийг удирдах дэд зүйлийг харахын тулд эдгээр хандалтын эрхийг хоёуланг нь эзэмшсэн байх шаардлагатай бөгөөд хоёр дахь хандалтын эрх хэнд ч байхгүй (бид үүнийг дөнгөж зохион бүтээсэн тул) энэ дэд зүйлийг хэн ч харахгүй.

Хандалтын эрхгүй цэсийн зүйлсийн хувьд процедур ижил байна. Та зүгээр л "Зөвшөөрлийн" хоосон талбарт шинэ хэрэглэгчийн зөвшөөрлийг нэмнэ үү.

Бидний хэрэглэгчийн зөвшөөрлийг нэмсний дараа хязгааргүй супер хэрэглэгчийн эрхтэй хэрэглэгч "Хэрэглэгчдийг удирдах" дэд цэсийг харахгүй гэдгийг анхаарна уу. Үүнийг засахын тулд та түүнд эдгээр нэвтрэх эрхийг өгөх хэрэгтэй. Хэрэв та эдгээр үйлдлийг шууд сайт дээр хийхээр төлөвлөж байгаа бол тусгай зөвшөөрөл үүсгэхээсээ өмнө эхлээд хязгаарлалтгүй администраторт эдгээр зөвшөөрлийг олгох хэрэгтэй.

Control Panel дахь анхдагч Администраторын бүлгийг хамгаалсан тул та үүсгэх хэрэгтэй шинэ загвархэрэглэгчийн хандалтын эрхийг агуулсан хандалтын бодлого, тэдгээрт суурилсан хандалтын шинэ бодлого. Та энэ хандалтын бодлогын загварт хэрэглэгчийн бүх хандалтын эрхээ оруулж болно. хэсэгт Аюулгүй байдал-> Хандалтын хяналт"Хандалтын бодлогын загвар үүсгэх" дээр дарна уу. Харилцан ярианы хувьд дараах параметрүүдийг ашиглана уу.

Нэр : CustomPermission Template

Загварын бүлэг : Админ

Тодорхойлолт :

Үүний дараа "Зөвшөөрөл нэмэх" товчийг хулганы баруун товчийг дарна уу. Харилцах цонхонд дараах параметрүүдийг ашиглана уу.

Нэр : миний_үзэх_хэрэглэгчийн_цэс

Тодорхойлолт : Тусгай цэсийн зөвшөөрөл

Дараа нь "Хандалтын бодлого" таб, дараа нь "Хандалтын бодлогыг үүсгэх" товчийг дарна уу. Харилцах цонхонд дараах параметрүүдийг ашиглана уу.

Нэр : Хэрэглэгчийн зөвшөөрөл

Хандалтын бодлогын загвар : CustomPermission Template

Тодорхойлолт : Миний хэрэглэгчийн зөвшөөрөл

"Захиалгат зөвшөөрөл" хандалтын бодлого дээр товшоод "Засварлах" гэснийг сонгоно уу. Миний_харах_хэрэглэгчийн_цэс зөвшөөрөл рүү доош гүйлгээд хажууд байгаа нүдийг чагтална уу. Баруун дээд буланд байгаа "Хадгалах" товчийг дарна уу.

Одоо бид шинэ ACL зүйл үүсгэснээр хязгаарлалтгүй Супер хэрэглэгчдэд энэ эрхийг өгөх хэрэгтэй. Хэсэг рүү оч Хамгаалалт->Хандалтын хяналт->Хэрэглэгчийн бүлгүүд". "Администратор" хэрэглэгчийн бүлэг дээр хулганы баруун товчийг дараад "Хэрэглэгчийн бүлгийг засварлах" гэснийг сонгоод "Контекст хандалт" таб дээр дараад "Нэмэх контекст" товчийг дарна уу. Харилцах цонхонд дараах параметрүүдийг ашиглана уу:

Контекст : мгр

Хамгийн бага үүрэг : Супер хэрэглэгч - 0

Хандалтын бодлого : Хэрэглэгчийн зөвшөөрөл

Дээд цэснээс сонгоно уу Аюулгүй байдал-> Хандалтын хяналт. Хязгааргүй Супер хэрэглэгчийн эрхтэй хэрэглэгчээс (мөн энэ хандалтын бодлоготой бусад хэрэглэгчээс) өөр хэн ч энэ цэсийг харах боломжгүй. Хэрэв та сайтын засварлагчийн нэгээр хяналтын самбар руу нэвтэрсэн бол "Хэрэглэгчийн удирдлага" дэд зүйл байхгүй байх ёстой.

Буцах Урагшаа

Гэхдээ энэ нь бидний хувьд биш юм ;).

Бид бүгдийг эхнээс нь хийх болно. Аль хэдийн бэлэн сонголтууд байгаа тул бидэнд (надад) яагаад хэрэгтэй байсан бэ? Яагаад гэвэл энэ нь надад илүү таалагддаг. Яагаад гэвэл энэ аргыг хамгийн зөв гэж бодож байна. Учир нь бид өөрсдийнхөө кодыг хэрхэн хөгжүүлэхээ мэддэг бол хэн нэгний кодыг хялбархан ойлгож, өөрчлөх, алдаа засах, эсвэл тодорхой тохиолдолд шаардлагатай функцээр нөхөх боломжтой. Эцэст нь, өөрөө хийх нь ихэвчлэн маш сайхан байдаг!

Дараах өгүүллэг нь уншигч хамгийн бага мэдлэгтэй гэж таамаглах болно PHP програмчлал. Онолын хувьд, кодыг огт ойлгодоггүй хүмүүс кодыг хуулж, доор хэлэлцэх бүх үйлдлүүдийг хуулбарлах боломжтой болно. Гэсэн хэдий ч үндсэн код руу орохгүйгээр гадаад тохиргоо хийх олон сонголтыг өгдөг тул бэлэн хэсгүүдийг a la Ditto ашиглах нь илүү дээр байж магадгүй юм.

Хэрэглэгчийн хувьд аль нь илүү дээр вэ гэдгийг би маргахыг хүсэхгүй байна - бэлэн нэгийг авах эсвэл өөрөө хөгжүүлэх ... Энэ хоёр тохиолдол хоёуланд нь давуу болон сул талуудтай. Миний хувьд хоёр дахь хувилбарт илүү давуу тал бий. Мөн уншигч бүр өөрөө шийднэ.

Ингээд өөрсдийнхөөхийг дахин нэг харцгаая. Манай вэбсайтад маш олон янзын програм хангамжийн хэсгүүд байгаа тул бид хаа нэг газар эхлэх шаардлагатай байгаа тул программчилцгаая ...

Дээд цэс

"Дээд цэс" гэсэн нэр томъёогоор би сайтын дээд хэсэгт байрлах хуудсуудын холбоосыг хэлж байна (доорх зургийг үзнэ үү):

Би хэсэгчилсэн найруулгын анхны жишээг нарийвчлан тайлбарлах болно. Ирээдүйд би хамгийн чухал нарийн ширийн зүйлийг анхаарч үзэх болно.

Үүнийг өмнөх нийтлэлд бүтээсэн менежментийн систем дэх манай сайтын модтой харьцуулж үзье.

Зургаас харахад сайтын модонд дөрвөн баримт бичгийг тодруулсан байна ("Блог", "Зохиогчдын тухай", "Зураг" ба " Санал хүсэлт"), дараа нь дээд цэсэнд холбоос үүсгэх болно.

Бид өмнө нь цэсэнд харуулахыг хүсэхгүй байгаа баримт бичгүүдийг нууж байсныг бас сануулъя. Жишээлбэл, "Сайтын хайлт" нэртэй баримт бичгийн тохиргооноос бид "Цэсэнд харуулах" нүдийг арилгаж, "Холбоос" болон "Ангилал" гэсэн хоёр баримт бичгийг сайт дээрх "Нийтлэх" нүдийг сонголгүй нуусан. Баримт бичгийн тохиргоон дахь баримт бичгийн тохиргоо ("Хуудасны тохиргоо" таб).

Тиймээс, өмнөх нийтлэлд бид хяналтын систем дэх дээд цэсийг бэлтгэсэн.

Одоо өөрсдийн үйлдлийг сайт дээр шууд харуулах асуудал руу шилжье.

Сайт дээрх ихэнх програмуудыг гэгддэг програмууд гүйцэтгэдэг. " ", өөрөөр хэлбэл. кодын бие даасан хэсгүүд (тэдгээрийг мөн гэж ойлгож болно бие даасан функцуудэсвэл дэд программууд) PHP дээр. Тиймээс MODx-д дээд цэсийн дэлгэцийг хэрэгжүүлэхийн тулд бид мөн шинэ хэсэг үүсгэж, үүнийг програмчилж, зөв ​​газарт нь загварт энэ хэсэг рүү залгах хэрэгтэй.

Удирдлагын систем рүү ороод "Нөөц" таб -> "Нөөцийн менежмент" -> "Хэсэг" табыг нээгээд "Шинэ хэсэг" холбоос дээр дарна уу. "Хэсэглэлийн нэр" талбарт хашилтгүйгээр "TopMenu" гэж бичээд одоохондоо хоосон хэсгийг кодгүйгээр хадгалаарай. Хадгалсны дараа бид "Хэсэг" таб дээр өөрийн хэсэгчилсэн хэсгийг харах болно.

Бид загвартаа дээд цэсийг "TOPMENU" хэсэгт байрлуулсан гэдгийг сануулъя. "Хэсэг" таб руу шилжиж, " " хэсгийг нээцгээе. Энэ хэсгийн агуулгад бид дараах кодыг харах болно.


  • Блог

  • Зохиогчдын тухай

  • Зураг

  • Санал хүсэлт

Энэ код нь манай цэсийг үүсгэдэг. Үүнийг тайлбарлаж, хэсэг дэх "TopMenu" хэсэг рүү дуудлага нэмнэ үү:


[]

Энд дахин бид энэ барилгын утгыг тайлбарлахын тулд бага зэрэг ухрах хэрэгтэй болно []. Бид [] эсвэл [!SnippetName!] гэх мэт бүтцийн тусламжтайгаар загвар, хэсэг, тэр ч байтугай хаана ч байсан хэсэгчилсэн дуудлагыг хийх боломжтой болсон явдал юм. тусдаа хуудассайт.

Энэ тохиолдолд барилгын [] нь дуудлагыг илэрхийлнэ кэш хийх боломжтойхэсэгчилсэн хэсэг, i.e. динамик дэд программыг дуудаж, үр дүнг нь нэг удаа тооцоолж, гүйцэтгэх бөгөөд дараа нь энэ хэсгийг дуудсан хуудсыг ачаалах үед үр дүн өөрчлөгдөхгүй, учир нь хэсэг дахин дуудагдахаа больсон. Ийм байдлаар бид вэб сервер дээрээ нөөцийг хэмнэдэг (мөн нөөц рүү ачаалал ихтэй үед энэ нь үргэлж чухал байдаг).

Гэсэн хэдий ч, та хэсэгчилсэн кодыг байнга дахин ажиллуулах шаардлагатай байдаг бөгөөд үр дүнг кэшлэх боломжгүй байдаг. Ийм тохиолдолд [!SnippetName!] бүтцийг ашигладаг бөгөөд энэ нь хэсэгчилсэн хэсгийг кэш хийхгүйгээр гүйцэтгэхэд хүргэдэг. Үүнтэй адилаар энэ барилгыг дуудлага гэж нэрлэдэг кэш хийх боломжгүйхэсэгчилсэн хэсэг.

Тиймээс "TOPMENU" хэсгийг хадгалж, сайтын хуудсыг шинэчилье. Хмм, хачирхалтай нь дээд цэс алга болсон. Гэхдээ энэ үнэхээр гайхалтай гэж үү? Хэсэг дэх цэсийн HTML кодыг тайлбарласнаар бид түүний дэлгэцийг хөтөч дээр нуусан (үүнийг харна уу. эх код HTML хуудаснууд). Гэхдээ манай "TopMenu" хэсэг нь юу ч хийхгүй, учир нь юу ч нэмээгүй байна. Энэ дутагдлаа засъя :).

"Хэсэглэлүүд" таб руу буцаж очоод, үүсгэсэн "TopMenu" хэсгийг нээж, түүний чадварыг туршиж үзээрэй ... Тэвчээртэй байгаарай, ахисан түвшний уншигчид минь, эдгээр нарийн ширийн зүйлийг хүн бүр мэддэггүй.

Эхлээд хамгийн энгийн кодыг (энгийн PHP код) бичье:

echo "Туршилт хийж байна...";
?>

Хадгалахаасаа өмнө "Үргэлжлүүлэн засварлах" гэснийг сонгоно уу Бид хэсэгчилсэн хэсгийг нэгээс олон удаа өөрчлөх шаардлагатай бөгөөд үүний дараа бид хэсэгчилсэн хэсгийг хадгалах болно. Сайтын хуудсыг сэргээж, дээд цэсний оронд харцгаая ... үнэнийг хэлэхэд, цэсний бага зэрэг томорсон цэнхэр дэвсгэрийг эс тооцвол эхлээд харахад бид бараг ямар ч өөрчлөлтийг харахгүй. Сайтын хуудсан дээрх бүх текстийг сонгохын тулд "CRTL+A" товчийг дарвал манай хэсэг цэсний оронд "Тест хийж байна..." гэсэн текст гарч ирэхийг харах болно, зөвхөн текстийн өнгө нь дэвсгэрийн өнгөтэй тохирч байна.

Хэсгийн кодыг дараах байдлаар өөрчилье.

цуурай " Туршилт хийж байна...";
?>

Одоо бид хэсэгчилсэн хэсэг ажиллаж, тэр ч байтугай (!) зарим текстийг харуулж байгааг тодорхой харж байна. За, энэ нь маш сайн, гэхдээ бидний даалгаварт хангалтгүй, учир нь бид "TOPMENU" хэсэгт тайлбар хийсэн яг ижил HTML кодоор хяналтын системээс холбоосуудыг харуулах ёстой.

Бас дахин бага зэрэг анхаарал сарниулах...

MODx дахь баримт бичгийн харилцааны бүх систем нь "эцэг эхийн баримт бичиг" бүр нь тэгээс олон тооны "хүүхдийн баримт бичиг" ("эцэг эх" -> "хүүхдүүд") гэсэн зарчим дээр суурилдаг.

MODx мэдээллийн сан дахь баримт бичиг бүр өөрийн гэсэн өвөрмөц танигч "ID"-тэй байдаг - энэ нь баримт бүрийн хажууд байгаа сайтын модны хаалтанд байгаа тоо юм.

Дашрамд хэлэхэд, энэхүү өвөрмөц танигч нь зөвхөн нэг утгатай - удирдлагын систем дэх тодорхой баримт бичгийг өвөрмөц байдлаар тодорхойлдог. бас өөр юу ч биш! Эдгээр танигчийг олон янзын зорилгоор өөрчлөх оролдлого олон удаа тулгарсан тул би энэ баримтыг онцгойлон тэмдэглэж байна ... Энэ нь зүгээр л утгагүй гэдгийг та даруй санах хэрэгтэй, тиймээс эдгээр тоог өөрчлөх гэж бүү оролдоорой. Та тэдгээрт огт анхаарал хандуулах ёсгүй;

MODx мэдээллийн сан нь баримт бүрт тусгай "эцэг эх" талбар үүсгэдэг. Энэ талбарын утга нь эх баримт бичгийн өвөрмөц танигчийг харуулсан тоо эсвэл хэрэв баримт нь модны үндэс дээр байвал тэг байна. Тиймээс та тухайн баримт бичгийн үндсэн баримт бичиг нь аль баримт бичиг болохыг хоёрдмол утгагүй тодорхойлох боломжтой.

Бидний дөнгөж сая юу ярьсныг тодорхой харахын тулд phpMyAdmin-г нээж, өгөгдлийн санг сонгоод (PREFIX)site_content хүснэгтийг олоорой. Энд (PREFIX) нь суулгах явцад оруулсан таны угтвар юм. Та "ID" - өвөрмөц танигч, "эцэг эх" - эх баримт бичгийн дугаар, "хуудасны гарчиг" - хуудасны гарчиг гэх мэт тодорхой баримт бичгийн өгөгдлийг хадгалах олон талбаруудыг харах болно.

Тиймээс ашиглаж байна энэ мэдээлэл MODx дахь баримт бичгүүдийг хадгалах, холбох зарчмын талаар бид дээд цэсийн холбоосыг харуулахын тулд шаардлагатай өгөгдлийг хэрхэн олж авахыг ойлгож чадна: бид мэдээллийн сангаас сайтын модны үндэст байрлах бүх баримт бичгийг олох хэрэгтэй. "эцэг эх" талбарт тэг утгатай байна.

SQL хэлийг ашиглавал үүнтэй төстэй асуулгыг дараах байдлаар тайлбарлах болно (Та бичиж үзээрэй энэ хүсэлт phpMyAdmin-ийн SQL оролтын талбарт "modx_"-г угтвараараа сольсны дараа):

СОНГОХ *
`modx_site_content`-аас
WHERE `эцэг эх` = 0;

Гэсэн хэдий ч, ийм хүсэлт нь бидэнд сайтын үндсэн бүх баримт бичгүүдийг буцааж өгөх болно, энэ нь үндсэн даалгавар дээр тулгуурлан бүрэн зөв биш юм - зөвхөн эдгээр баримт бичгийн холбоосыг харуулах:

  • нийтлэгдсэн статус (мэдээллийн санд энэ зүйлийг "нийтлэгдсэн" талбараар төлөөлдөг бөгөөд утга = 1 нь баримт бичиг нийтлэгдсэн, утга = 0 нь нийтлээгүй гэсэн үг).
  • устгаагүй ("устгагдсан" талбар, 1-ийг устгаж, 0-ийг устгаагүй),
  • "Цэсэнд харуулах" сонголтыг тохируулсан ("нуух" талбар, 1 нь нуух, 0 нь цэсэнд харуулах гэсэн үг).

Нэмж дурдахад, бид бага зэрэг харвал бид баримт бичгүүдийг "Цэс дэх байрлал" параметрээр нэн даруй эрэмбэлэх бөгөөд энэ нь манай цэс дэх холбоос бүрийн байрлалыг тодорхойлох болно.

За, SQL-ийн үүднээс авч үзвэл энэ нь үнэхээр тийм юм хялбар даалгаварбөгөөд энэ нь дараах байдлаар шийдэгддэг.

СОНГОХ *
`modx_site_content`-аас
ХААНА `хэвлэгдсэн` = 1
БА "эцэг эх" = 0
БА `устгагдсан` = 0
БА `hidemenu` = 0
`menuindex` ASC-ээр ЗАХИАЛАХ;

Онолын хувьд, бүх SQL асуулгыг шууд хэсгээс хэсэгчлэн гүйцэтгэж болно PHP ашигланскриптүүд, мэдээллийн баазыг тухай бүр шинээр холбож, бусад олон ердийн үйлдлүүдийг хийж, дахин дахин давтдаг ... Гэхдээ энэ нь манай удирдлагын систем болох хүрээг ашиглах санааг үгүйсгэх болно. MODx нь бусад давуу талуудын дунд бэлэн хэрэгслүүдээр хангадаг програм хангамжийн интерфейс(API, Хэрэглээний програмчлалын интерфейс). API нь өгөгдөл боловсруулах олон процессыг нэгтгэж, хөнгөвчлөх програм хангамжийн функцууд юм.

Бидний хэсэгчилсэн хэсэгт дурдсан "getDocumentChildren" API функцүүдийн аль нэгийг ашиглацгаая. "getDocumentChildren" функц нь дараах өгөгдлийг параметр болгон хүлээн авдаг:

  • $id - эх баримт бичгийн дугаар,
  • $active - зөвхөн нийтлэгдсэн эсвэл хэвлэгдээгүй баримт бичгүүдийг сонгох (1 эсвэл 0 тус тус),
  • $устгагдсан - зөвхөн устгасан эсвэл устгаагүй баримт бичгүүдийг сонгох (1 | 0),
  • $fields - мэдээллийн сангаас сонгосон талбарууд,
  • $ хаана - онцгой нөхцөл, өөрөөр хэлбэл. SQL асуулга дахь WHERE нөхцөл,
  • $sort - үр дүнг эрэмбэлэх талбар
  • $direction - эрэмбэлэх чиглэл, ASC эсвэл DESC утгыг авч болно, i.e. багаас хамгийн том утга руу эрэмбэлэх эсвэл эсрэгээр
  • $ Limit - хүсэлтийн хязгаар, өөрөөр хэлбэл. SQL асуулга дахь LIMIT нөхцөл

$үр дүн = $modx->getDocumentChildren(
$id = 0,
$ идэвхтэй = 1,
$ устгасан = 0,
$ хаана = "hidemenu = 0",
$sort = "цэсийн индекс",
$dir="ASC",
$ хязгаар
);

Хэвлэх("

Foreach ($ үр дүн нь $ түлхүүр => $ үнэ цэнэ) (
хэвлэх_r ($ үнэ цэнэ);
}

Хэвлэх("");
?>

Хэсгийг хадгалаад хуудсыг дахин сэргээнэ үү. Шинэчлэгдсэн "TopMenu" хэсгийг ажиллуулсны үр дүнд та "цэсний индекс" талбарын утгуудаар хамгийн жижигээс том хүртэл эрэмбэлэгдсэн массив болон тэдгээрийн утгуудын жагсаалтыг харах болно. $dir="ASC" параметрийг $dir="DESC" болгож өөрчлөхийг оролдоорой - үүний үр дүнд массивууд дахин бүтээгдэж, "цэсийн индекс" талбарын хамгийн өндөр утгатай баримт бичиг эхний баримт бичиг болж харагдах болно.

Туршлагатай програмистууд олж авсан үр дүн нь холбоос бүхий бэлэн цэсийг бий болгоход шаардлагатай бүх зүйлийг аль хэдийн хангасан гэдгийг ойлгож магадгүй юм. За, бараг бүх зүйл. Ямар ч тохиолдолд би үргэлжлүүлнэ: хүссэн үр дүндээ аль болох ойртохын тулд PHP кодыг дахин бичье.

$үр дүн = $modx->getDocumentChildren(
$id = 0,
$ идэвхтэй = 1,
$ устгасан = 0,
"id, хуудасны гарчиг, нийтлэгдсэн, цэсийн индекс, устгасан, нуугдмал цэс, цэсийн гарчиг",
$ хаана = "hidemenu = 0",
$sort = "цэсийн индекс",
$dir="ASC",
$ хязгаар
);

$ зүйлс = "";
$output = "";

Foreach ($ үр дүн нь $ түлхүүр => $ үнэ цэнэ) (
$ зүйл. = "


  • ".$утга["pagetitle"]."
  • \n";
    }

    Хэрэв ($ зүйл != "") (
    $ гаралт = "

      \n";
      $ гаралт .= $ зүйл;
      $ гаралт. = "
    \n";
    }

    Буцах $output;

    Энэ бол хамгийн энгийн PHP код тул бид кодыг нарийвчлан шинжлэхгүй. Хэрэв хэн нэгэн барилгын утгыг ойлгохгүй байвал сэтгэгдэл үлдээнэ үү, эсвэл холбогдох дэмжлэгийн форум руу очно уу.

    Хадгалцгаая шинэ кодхэсэгчлэн оруулаад хуудсыг дахин сэргээнэ үү. Кодыг ажиллуулсны үр дүнд бид бараг юу авахыг хүсч байгаагаа харах болно.

    Тэдгээр. Эдгээр нь аль хэдийн автоматаар үүсгэгдсэн холбоосууд бөгөөд тэдгээрийн бүтэц нь MODx модны баримт бичгийн бүтцийг бүрэн давтдаг. Үүнийг шалгахын тулд сайтын үндсэн хэсэгт туршилтын баримт бичгийг үүсгэж, хуудсыг дахин сэргээнэ үү.

    Гэсэн хэдий ч энэ нь бүгд биш юм. Олон хүмүүс холбоосууд байгааг анзаарсан байх, гэхдээ холбоос байхгүй байна ... Парадокс :). Баримт бичгийн нэр цэсэнд харагдах боловч тэдгээрт холбогдох холбоосууд ажиллахгүй байна гэсэн үг. Энэ нь логик юм, учир нь одоогоор холбоосын код нь бодит замуудын оронд "#"-г харуулж байна.

    Энэ асуудлыг шийдэхийн тулд та өөр нэг зүйлийг сурах хэрэгтэй ашигтай боломж MODx: сайтын аль ч дотоод хуудасны хаягийг дараах бүтэцтэй [~id~] ашиглан авч болно, энд id нь өвөрмөц тоо юм. шаардлагатай бичиг баримт, өөрөөр хэлбэл сайтын модны баримт бичиг бүрийн нэрний хажууд хаалтанд заасан ижил дугаар. Иймээс загвар/хэсэг/хуудасны агуулгад ийм бүтцийг [~1~] нэмснээр,

      • индекс – "Блог" баримт бичгийн бусад нэр, хэрэв бид "индекс"-ийг баримт бичгийн бусад нэрээр оруулсан бол, эсвэл
      • 1.html, хэрэв бид "Блог" баримт бичгийн "Хоч" талбарт юу ч оруулаагүй бол
    • хэрэв нөхөрсөг холбоосууд идэвхгүй бол бид index.php?id=1 гэсэн текстийг харах болно

    Энэ мэдээллийг ашиглан хэсэгчилсэн хэсгийг дахин бичье:

    $үр дүн = $modx->getDocumentChildren(
    $id = 0,
    $ идэвхтэй = 1,
    $ устгасан = 0,
    "id, хуудасны гарчиг, нийтлэгдсэн, цэсийн индекс, устгасан, нуугдмал цэс, цэсийн гарчиг",
    $ хаана = "hidemenu = 0",
    $sort = "цэсийн индекс",
    $dir="ASC",
    $ хязгаар
    );

    $ зүйлс = "";
    $output = "";

    Foreach ($ үр дүн нь $ түлхүүр => $ үнэ цэнэ) (
    $ зүйл. = "


  • ".$утга["pagetitle"]."
  • \n";
    }

    Хэрэв ($ зүйл != "") (
    $ гаралт = "

      \n";
      $ гаралт .= $ зүйл;
      $ гаралт. = "
    \n";
    }

    Буцах $output;

    Тиймээс бид #-г [~".$value["id"].."~] болгож өөрчилсөн, өөрөөр хэлбэл. Үнэндээ массивын баримт бичиг бүрийн хувьд түүний өвөрмөц ID нь [~id~] бүтэц дотор орлоно. Үүний үр дүнд бид ажлын холбоос бүхий цэсийг авдаг.

    Бид бараг л идеалдаа хүрсэн... Гэсэн хэдий ч одоо ч гэсэн анхаарах ёстой нэг нарийн ширийн зүйл байсаар байна: дизайнер бидний идэвхтэй холбоосыг цагаан дэвсгэрээр тодруулж, холбоосын өнгийг улбар шар болгон өөрчлөх ёстой гэж тодорхойлсон.

    Үүнд хүрэхийн тулд бид MODx CMS-ийн нууцыг дахин дэлгэх болно :). API-д $modx->documentIdentifier функц нуугдаж, утгыг буцаана өвөрмөц танигчодоогийн хуудас. Идэвхтэй хуудсыг тодорхойлж, цэсэнд тодруулахын тулд бидэнд хэрэгтэй болно:

    $үр дүн = $modx->getDocumentChildren (
    $id = 0,
    $ идэвхтэй = 1,
    $ устгасан = 0,
    "id, хуудасны гарчиг, нийтлэгдсэн, цэсийн индекс, устгасан, нуугдмал цэс, цэсийн гарчиг",
    $ хаана = "hidemenu = 0",
    $sort = "цэсийн индекс",
    $dir="ASC",
    $ хязгаар
    );

    $cid = $modx->documentIdentifier;

    $ зүйлс = "";
    $output = "";

    Foreach ($ үр дүн нь $ түлхүүр => $ үнэ цэнэ) (
    хэрэв ($утга["id"] == $cid) (
    $active = " id=\"идэвхтэй\"";
    }
    өөр(
    $active = "";
    }
    $ зүйл. = "
    ".$утга["pagetitle"]."
    \n";
    }

    Хэрэв ($ зүйл != "") (
    $ гаралт = "

      \n";
      $ гаралт .= $ зүйл;
      $ гаралт. = "
    \n";
    }

    Буцах $output;

    За, яаж бүтсэн бэ? Энэ ажилласан!

    Гэхдээ энэ бүхэн үүгээр дуусна гэж та бодоогүй биз дээ? Тэгээд ч зөв. Бид өөрсдийгөө хамгийн дээд хязгаарыг тогтоодог тул MODx-ийн хамгийн дээд чадварыг ашиглахыг хүсч байна. Тиймээс бидний орхигдуулсан бас нэг жижиг нарийн ширийн зүйл байна.

    Бид getDocumentChildren функцийг ашиглан хүссэн талбаруудын нэрийг сайтар харцгаая: "id, хуудасны гарчиг, нийтлэгдсэн, цэсийн индекс, устгагдсан, hidemenu, цэсний гарчиг". Тэдний дунд "цэс" гэх мэт талбар байдаг. Нэрнээс нь харахад энэ талбарыг хадгалах боломжтой цэсийн гарчиг. Хяналтын систем нь "Цэсийн зүйл" гэсэн оролтын талбартай. Энэ талбар нь сонголттой. Гэсэн хэдий ч логик нь хэрэв энэ талбарыг бөглөсөн бол бид цэс дэх холбоосын текстийг хэрэглэгчийн оруулсан текстээр солих ёстой. За ингээд хийцгээе:

    /********************************
    Нэр: Дээд цэс
    Зорилго: Дээд цэсийг харуулах
    Төсөл: MODx Demosite
    ********************************/

    $үр дүн = $modx->getDocumentChildren(
    $id = 0, // Үндсэн баримт бичгийн ID
    $active = 1, // Зөвхөн нийтлэгдсэн баримтуудыг сонгоно уу
    $deleted = 0, // Зөвхөн устгаагүй баримт бичгүүдийг сонгоно
    "id, хуудасны гарчиг, нийтлэгдсэн, цэсийн индекс, устгасан, нуугдмал цэс, цэсийн гарчиг", // Өгөгдлийн сангаас талбаруудыг сонгоно уу.
    $where = "hidemenu = 0", // Зөвхөн цэсэнд нийтлэх шаардлагатай баримт бичгүүдийг сонгоно
    $sort="цэсийн индекс", // Баримт бичгийг цэсийн индексийн талбараар эрэмбэлэх
    $dir="ASC", // Баримт бичгийг өсөх дарааллаар эрэмбэлэх
    $limit = "" // Бид хязгаарлалт тавьдаггүй (SQL асуулга дахь LIMIT параметр)
    );

    $cid = $modx->documentIdentifier; // одоогийн хуудасны ID-г авна

    $ зүйлс = "";
    $output = "";

    Foreach ($ үр дүн нь $ түлхүүр => $ үнэ цэнэ) (
    хэрэв ($утга["id"] == $cid) (
    $active = " id=\"идэвхтэй\"";
    }
    өөр(
    $active = "";
    }
    if ($value["menutitle"] != "") (
    $title = $value["цэс"];
    }
    өөр(
    $title = $value["pagetitle"];
    }
    $ зүйл. = "
    ".$ гарчиг."
    \n"; //цэсийн зүйлсийг цуглуул
    }

    // Хэрэв бид дор хаяж нэг цэсийн зүйлийг олж чадсан бол,
    // HTML цэсийн код үүсгэх
    хэрэв ($ зүйл != "") (
    $ гаралт = "

      \n";
      $ гаралт .= $ зүйл;
      $ гаралт. = "
    \n";
    }

    // Хэсгийн үр дүнг буцаана
    буцаах $ гаралт;

    Одоо ямар нэгэн баримт бичгийн "Цэсийн зүйл" оруулах талбарт зарим текст оруулахыг оролдоно уу... Бүх зүйл ажиллаж байна уу? Гайхалтай!

    P.S.: Манай цэсэн дэх линкийг дагавал хуудсуудын агуулга өөрчлөгдөхгүй байгаад зарим уншигчид гайхаж магадгүй ч хөтчийн хаягийн замаас харахад бид шинэ хуудас руу шилжиж байгаа юм шиг санагдаж байна... би, энэ бол туйлын хэвийн зүйл, учир нь Яг одоо бүх хуудсууд ижил загварыг ашиглаж байна. Энэ загварт бид зөвхөн дээд цэсийг динамик болгосон. Бид энэ талаар дараа нь ярих болно, гэхдээ одоохондоо - бүү сандар;).

    Дүгнэлт:

    Ингээд өөр нэг нийтлэл логик дүгнэлтдээ хүрлээ.

    Сургалтын үр дүн:

    • Бид MODx баримтууд дахь зарим оролтын талбаруудын зорилгыг ойлгохыг хичээсэн бөгөөд энэ мэдээллийг мэдээллийн санд хадгалахыг үзсэн;
    • Бид шинэ тусгай MODx загваруудын талаар олж мэдсэн: [], [!SnippetName!], [~id~];
    • Бид тусгай API-ийн талаар олж мэдсэн бөгөөд зарим API функцийг ашигласан;
    • Мөн энэ мэдлэг дээр үндэслэн бид MODx дээр шинэ хэсэгчилсэн хэсгийг бүтээсэн!

    Сайн байцгаана уу, эрхэм уншигчид. Сүүлийн хичээл дээр бид сайтыг зарим контентоор дүүргэсэн (), одоо цаг нь болсон цэсэнд байгаа бүх зүйлийг харуулахИнгэснээр хэрэглэгчид тэдгээр рүү шилжих боломжтой болно.

    Динамик үүсгэх MODX дахь цэсБид хэсэгчилсэн хэсгийг ашиглах болно PdoMenuбагцаас pdoTools. Эхлэхээсээ өмнө үндсэн баримт бичгийг уншина уу.

    pdoMenu баримтжуулалт

    Сонголтууд

    Загварын сонголтууд

    CSS ангийн сонголтууд

    Албан ёсны жишээнүүд


    Та албан ёсны баримт бичгийг эндээс уншиж болно. Одоо хамгийн энгийн цэсийн дуудлагуудыг харцгаая.

    PdoMenu руу залгана уу

    Сонголт 1. Энэ статик цэсийн оронд pdoMenu хэсгийг дуудна уу, үүний тулд нөөцийн мод, " таб дээр Элементүүд” хэсэг дэх хэсэг дэх утгыг өргөжүүлнэ үү pdoTools, дараа нь товшино уу pdoMenuхулганы зүүн товчийг дарж (товчлуурыг бүү суллаарай) энэ хэсгийг цэсийг нээхийг хүссэн газар руу чирээд нээгдэх цонхонд шаардлагатай параметрүүдийг бөглөж, "" дээр дарна уу. Хадгалах«.

    Сонголт 2. Бид дуудлагаа гараар бичдэг.

    Ердийн жишээнүүд

    Тогтмол нэг түвшний цэс

    Жишээлбэл, бид дараах html тэмдэглэгээ бүхий хамгийн нийтлэг цэстэй.

    Үр дүн нь цэс рүү залгах дараах код юм.

    • &parents=`0` - эцэг эхийн жагсаалт (миний хувьд сонголтоо хязгаарлахгүй, учир нь би зөвхөн тодорхой хуудсыг харуулах болно);
    • &level=`1` — үүрлэх түвшин (энэ тохиолдолд байхгүй);
    • &resources=`2,3,4,5` — цэсэнд харуулах шаардлагатай нөөцийн жагсаалт;
    • &firstClass=`0` — цэсийн эхний зүйлийн анги (аль нь биш);
    • &lastClass=`0` — цэсийн сүүлийн зүйлийн анги (аль нь биш);
    • &outerClass=`top-menu` — цэсний ороосон анги (ul-д орлуулсан);
    • &hereClass=`current-menu-item` — идэвхтэй цэсийн зүйлд зориулсан анги (li-д орлуулсан);
    • &rowClass=`цэсийн зүйл` - цэсийн нэг мөрийн анги (li-д орлуулсан).

    Хоёр түвшний захиалгат ачаалах цэс

    Статик html код дараах байдалтай байна.

    Түүний гаралтын код дараах байдалтай байна.

    Мөн дараагийн хичээл дээр би bootstrap дээр суурилсан унждаг цэсийн хэд хэдэн гаралтыг өгөх болно (мөн энэ нь мөн чанарыг ойлгоогүй хүмүүст зориулагдсан юм. За, тэгвэл бид үүнийг хийх болно.

    Эхлээд харахад бүх зүйл төвөгтэй мэт санагдаж байна, гэхдээ тийм биш, баримт бичгийг илүү дэлгэрэнгүй уншина уу, сэтгэгдэл дээр асуулт асуугаарай, би мэдээж туслах болно.