Мусук Страници
Важна задача на всяка CMS е рендирането на съдържание (Content Rendering или Content Output). Обикновено за това се използва някакъв шаблонен двигател. Orchard CMS използва Razor.
Форма и други необходими понятия
Терминологията на Orchard CMS може да се проектира върху терминологията на MVC, както следва:
- ContentItem - Модел. Обекти, управлявани от Orchard CMS. Състои се от части и полета.
- Драйвер-контролер. Всеки тип част или поле има съответен драйвер. Например TitlePart има TitleDriver.
- Форма - ViewModel. За една част или поле водачът може да генерира една или повече фигури. Формите могат да съдържат други форми. Така изходът ще бъде дърво от фигури.
- Изгледът може да бъде обикновен шаблон на Razor или може да бъде C# функция на класа IShapeTableProvider, маркиран с атрибута [Shape]. Това е вярно за такава обща фигура като List. (Core Shapes.cs)
Shape е обект, който комбинира ViewModel за изобразяване и параметри за изобразяване. Shape има име и алтернативни имена (Metadata.Alternates). Именно с тези имена Orchard се опитва да намери подходящ View.

В Orchard няма пряко съответствие между съдържание и форма. Например за TextField Driver ще създаде само една Shape, а за TitlePart ще има три от тях. Това значително усложнява разбирането как точно ще изглежда Shape tree.
проследяване на формата
Административният панел на Orchard CMS няма да ви уведоми от кои фигури ще бъде изобразена страницата и кой шаблон на Razor ще се използва за всяка фигура. За да отговорите на всички тези въпроси, има функция за проследяване на фигури, която може да бъде активирана в административния панел вМеню за модули.

Shape Tracing е подобен на FireBug по отношение на използването му: можете да задържите курсора на мишката върху част от HTML страница и да видите всички опции за изобразяване.

На илюстрацията по-горе можете също да забележите, че Orchard CMS поддържа механизма Theme, който ви позволява да замените основните шаблони. Темата, от която се нуждаете, може да бъде активирана с едно кликване в админ панела.

Резултатът от изобразяването на клона Shape изглежда така:

Благодарение на Shape Tracing можете да видите данните, които съдържа Shape. В допълнение към препратката към оригиналния ContentItem, Shape често съдържа други полета, създадени от драйвера. В примера по-долу TitlePart съдържа полето Title в допълнение към ContentItem.

Ограничения на формата
Shape Tracing има значително ограничение: за всеки Shape View трябва да генерира HTML в рамките на един таг. Към този етикет ще бъде прикачен идентификатор, а към тези идентификатори ще бъде прикачен инструментът за проследяване на формата. Ако това изискване е нарушено, Shape Tracing ще покаже дървото на Shape неправилно: няма да има разклонения.
Например, ако изглед за фигура генерира два етикета без един родител, тогава тази фигура няма да се поддържа от проследяване на фигури. Следният изход не се поддържа:
Въпреки това, Shape Tracing ще поддържа следния изход:
Оформление с допълнителни divs не винаги е възможно в реалния живот, така че ви съветвам да използвате механизма на темата. По-лесно е да направите една тема специално за Shape Tracing, а втората за реално оформление.
Между другото, много стандартни фигури имат такова оформление, че не се показват от Shape Tracer. Затова често трябва да навлезете в кода и да се опитате да разберете цялата йерархия на фигурите.
Тип дисплей
Shape Tracing показва стойността на параметъра Display Typeза форма.
Display Type е низ, който се предава на Driver, за да може да определи в какъв контекст ще бъде извикан. В зависимост от това драйверът може да генерира малко по-различен набор от форми с различни данни. Чрез разширяване на Orchard можете да зададете свои собствени стойности на Display Type, но по подразбиране Orchard използва следните стойности на параметъра Display Type:
- Резюме - ако искате да изведете кратка информация. Например, в случай на изобразяване на елемент от списък.
- Детайл - искате да покажете пълна информация. Например, в случай на изобразяване на елемент от списък на отделна страница.
- SummaryAdmin - трябва да изведете кратка информация в админ панела.
Orchard CMS ви позволява ръчно да генерирате дърво с форми и да го визуализирате директно от шаблон на Razor, като този:
Placement.info
Placement.info е файл с правила за рендиране на фигури. Тези правила позволяват:
- Предотвратете изобразяването на конкретна форма.
- Променете реда на показване на фигурите.
- Добавете алтернатива за форма.
Можете да прочетете повече за това в статията с информация за разположението. Ще дам само примери за използване на Placement.info.
Файловете Placement.info могат да се намират в папката на модула и в папката на темата. Placement.info от модулите се комбинират с Placement.info на текущата тема, като Placement.info на темата има по-висок приоритет.
Така че можете да деактивирате показването на Part'a:
Следващият пример показва как да попречите на всички типове да показват пълно описание в режим Резюме и кратко описание в режим Детайли.
Следващият пример описва правилото, че при показване на списък с държави за всяка страна, списък с градове няма да бъде показан, но ако покажем пълно описание на страната, тогава списъкът с градове ще бъдеоттеглена.
Струва си да се отбележи, че ако деактивираме изхода на Shape, неговият код не се изпълнява и моделът за тази Shape не се създава. В последния пример градовете няма да бъдат разтоварени от базата данни за списъка с държави.
След това използваме възможността да зададем допълнителен алтернативен вариант за формата. В следващия пример ще направим два различни шаблона за типа съдържание MyContentType.
Сега можем да създадем два шаблона на Razor:
Първият ще се прилага към Shape Parts_Tags_ShowTags само ако се показва с Display Type, равен на Summary, а вторият, ако Display Type е равен на Detail.
Зони, слоеве, уиджети
В страницата Orchard CMS. Например елементът на съдържанието, свързан със страницата, се изобразява в зоната на съдържанието. Наборът от всички възможни зони е дефиниран в темата на сайта. По подразбиране Orchard CMS има тема TheThemeMachine, която има повече от достатъчно зони. Във вашата собствена тема можете да дефинирате само зоните, от които се нуждаете.
Widget е елемент от съдържание, който може да бъде поставен в зона. С помощта на джаджи е удобно да се показват различни блокове от вторично съдържание като списък с последните новини, навигация и др.

За да направи някои джаджи видими само на главната страница, вторите на други страници и третите на всички страници като цяло, Orchard CMS има механизъм за слоеве (слоеве).

Всеки слой има правила за показване. Например, можете да направите слой винаги видим и да поставите джаджа за навигация върху него, да направите друг слой видим само на началната страница и да поставите там приветствено съобщение. В зависимост от правилата за показване, слоевете могат да се комбинират.
Всъщност джаджата има две координати: зона и слой. Една джаджа не може да бъде на няколко слоя едновременно.
В други CMSсъществува концепцията за шаблон на страница или оформление. Това е нещо, което определя кои клетки със съдържание ще бъдат на страница от определен тип. В Orchard CMS няма такава концепция, но има набор от зони, който е еднакъв за всички страници. Дали зоната ще се визуализира или не се определя в шаблона на Razor Layout.cshtml.
Следната снимка в админ панела е много объркваща:

Файлът с това изображение се нарича ThemeZonePreview.png и се очаква във всички теми. Всъщност местоположението на зоните се определя от шаблона Layout.cshtml и този шаблон може да е различен за различните страници. По този начин изображението ThemeZonePreview.png може да бъде подходящо само за прости сайтове с един Layout.cshtml, в други случаи е вредно, защото води до ступор, особено когато за първи път се запознаете със CMS.
Както показа практиката, няма смисъл да се произвеждат зони в резерв, както се прави в темата TheThemeMachine. Зоните могат лесно да бъдат създадени според нуждите, като просто добавите техните имена към Theme.txt.
Между другото, зоните могат да бъдат визуализирани не само в шаблона Layout.cshtml, но и в други шаблони. Само достъпът до зоната ще бъде през обекта Layout.
Това може да бъде полезно, ако искате да изобразите изпълним модул в оформление на съдържание или част.
Практикувайте да пишете шаблони на Razor за Orchard CMS
Достъп до свойства на полета и части
Ако елемент от съдържанието е наличен в шаблона на Razor, тогава можете да се обърнете към всеки файл на която и да е част от този елемент от съдържание.
Model.ContentItem е променлива от динамичен тип, това ви позволява да осъществявате достъп до полета като това:
Ако полето се добави директно към типа съдържание, името на частта ще бъде същото като това на типа:

Съдържателната част може да има свои собствени свойства, за които отговарясамата част. Например свойството Title на TitlePart или свойството Text на BodyPart. В шаблон на Razor те могат да бъдат достъпни по този начин: @Model.ContentItem.TitlePart.Title
Свързване на скриптове и стилове
Добавянето на стилове и скриптове към шаблоните на Razor е много добре направено в Orchard CMS.
Един модул може да има файл ResourceManifest.cs, който определя какви скриптове и стилове съдържа модулът. Освен всичко друго, там са описани връзките между скриптовете. Например, ако включите jQuery UI, тогава Orchard ще включи jQuery, преди да включи jQuery UI. В шаблон на Razor изглежда така:
Методите AtHead() и AtFoot() определят къде ще бъде вмъкнат тагът >.
Във вашата тема можете да създадете ResourceManifest.cs и да опишете CSS и JS ресурси и връзките между тях там. Например, както следва:
След това можете да включите ES_Main в CSHTML по следния начин: Script.Require("ES_Main").AtHead() и Orchard ще генерира включване за всички зависими скриптове.
Път към картината
Снимките обикновено са включени в темата. Ако искате да получите пътя до изображението във вашата тема, тогава ви е необходим следният код:
Връзка към елемент със съдържание
Можете да генерирате връзка към елемент на съдържание в шаблон на Razor, като използвате функцията Url.ItemDisplayUrl, както следва:
кеширане
Заключение
Представянето на съдържание в Orchard CMS има особена идеология, базирана на Shape tree. Не можете да контролирате показването на съдържание от административния панел, тъй като Shape Tracing е основният инструмент за разработване на шаблони.