Orchard CMS – wprowadzenie  

Udostępnij na: Facebook

Autor: Piotr Zieliński

Opublikowano: 2011-03-14

Wprowadzenie

Orchard jest rozbudowanym i wysoce rozszerzalnym systemem zarządzania treścią (CMS). W przeciwieństwie do popularnego DotNetNuke, został napisany w ASP.NET MVC, a nie w czystym ASP.NET. Ponadto wykorzystuje nowości z wersji 3.0 – np. nowy silnik renderujący Razor. Dzięki takiej architekturze programista może dostosować framework Orchard do dowolnej aplikacji internetowej. Jeśli udostępniona funkcjonalność jest niewystarczająca, można napisać własne moduły. Szata graficzna (theme) oraz layout są również konfigurowalne – można modyfikować już te istniejące lub tworzyć całkowicie nowe. Ze względu na ogrom możliwości obsługa Orchard może na początku wyglądać na skomplikowaną. Artykuł ma na celu omówienie podstaw frameworku oraz rozwianie wszelkich wątpliwości związanych z wdrażaniem systemu do własnych projektach.

Instalacja

Pobieramy ze strony projektu najnowszą wersję. Możemy pobrać wersję instalacyjną lub spakowaną. Po rozpakowaniu (lub zainstalowaniu) otwieramy i uruchamiamy solucję. Uruchomi się strona konfiguracyjna, gdzie podajemy login, hasło, namiary na bazę danych itp.:

Całość instalacji to tylko jeden krok! Po wprowadzeniu danych i kliknięciu w przycisk Submit zostanie utworzona odpowiednia struktura tabel we wskazanej bazie danych. Po chwili będziemy mogli cieszyć się pierwszym projektem stworzonym w Orchard:

Jak widać, strona główna składa się z kilku stref, np. First Leader Aside lub Second Leader Aside  (dokładne znaczenie powyższych elementów zostanie przedstawione w dalszej części artykułu). Przyjrzyjmy się jeszcze panelowi administracyjnemu (na samym dole strony jest link – Dashboard):

Architektura

Panel administracyjny (dashboard) zawiera mnóstwo opcji i dlatego, aby w pełni zrozumieć funkcjonowanie Orchard, warto zapoznać się z jego elementami od strony teoretycznej.

Najpierw przyjrzyjmy się, jak podzielona jest treść w Orchard:

  • Content Item – jest podstawowym elementem w Orchard zawierającym jakąś treść. Przeważnie skojarzony jest z pojedynczym adresem URL, np.: strona www, aktualności, blog czy posty. W prostych systemach CMS jedynym Content Item jest zarządzana strona. W Orchard oprócz prostych stron do dyspozycji mamy blogi, listy obiektów czy posty. Można oczywiście definiować własne typy zawartości.
  • Content Type – to po prostu typ zawartości (np. blog czy post). Innymi słowy, Content Item stanowi jakiś obiekt, a Content Type jego typ (klasę). Terminy bardzo podobne, jednak Orchard rozdziela je w interfejsie pomiędzy dwa menu i dlatego warto znać tę terminologię.
  • Content Part – każda treść (Content Item) składa się z dowolnej liczby części (Content Part). Części są fragmentami funkcjonalności, które mogą być wykorzystywane między różnymi modułami. Komentarze czy tagi są przykładami Content Part. Możemy w końcu komentować różne fragmenty strony, nie tylko posty w dziale aktualności.
  • Content Field – zawartość, oprócz Content Part, składa się również z Content Field – pojedynczych pól.  Pola mają swoją etykietę oraz typ (np. tekstowe lub numeryczne). Tworząc swój własny typ zawartości, możemy doczepiać do niego różne pola (Content Field) oraz części (Content Part).

Moduł

Moduł stanowi zgrupowanie funkcjonalności. Raz zaimplementowany moduł może być wykorzystywany w różnych systemach Orchard. Implementacja modułu jest umieszczona w folderze Modules. Można również zainstalować moduły zaimplementowane przez innych użytkowników, wykorzystując Orchard Module Gallery.

Features

Cechy (features) są podzbiorem funkcjonalności w ramach modułu, które użytkownik może włączać lub wyłączać. W przypadku np. modułu odpowiedzialnego za logowanie, features mogą stanowić implementacje autoryzacji za pomocą Yahoo czy Live.

Manifest

Manifest jest plikiem tekstowym opisującym dany moduł. Na podstawie manifestu Orchard Gallery wyświetla stosowne informacje (opis, autor itp.) o module. Przykład:

Name: Comments
AntiForgery: enabled
Author: The Orchard Team
Website: http://orchardproject.net
Version: 0.9.0
OrchardVersion: 0.9.0
Description: The comments system implemented by this module can be applied to arbitrary Orchard content types, such as blogs and pages. It includes comment validation and spam protection through the Akismet service.
Features:
    Orchard.Comments:
        Name: Comments
        Description: Standard content item comments.
        Dependencies: Settings
        Category: Social

 

Oprócz czystej treści i logiki, Orchard odpowiada również za warstwę prezentacji. Z tego względu wyróżniamy kilka ważnych terminów:

Motywy graficzne (themes)

Orchard gwarantuje niezależność między treścią a sposobem jej wyświetlania. Motyw jest ogólnym terminem opisującym wygląd strony i składa się z szablonów, arkuszy CSS, grafiki, widoków itp.

*Layout *

Layout definiuje rozmieszczenie poszczególnych elementów na stronie. To za pomocą layoutu określamy, w którym miejscu ma zostać wyświetlona stopka, a w którym ostatnio dodane aktualności.

Szablon (template)

Szablon odpowiada za wyświetlenie danej treści, np. Content Type. Odpowiada zatem za transformację modelu zawierającego czyste dane do postaci rozpoznawalnej przez przeglądarki internetowe (czyli do HTML). Przykład w Razor:

<h1>@Model.PageName</h1>

Kształt (shape)

Zanim cokolwiek w Orchard zostanie wyrenderowane (na podstawie szablonów), najpierw jest konwertowane do obiektów shape. Abstrakcyjne drzewo obiektów ułatwia zarządzanie widokami z poziomu różnych modułów.

Placement file

Jak już wspomniano, zawartość składa się z tzw. Content Part. Szablony definiują wygląd konkretnych części. Z kolei plik placement odpowiada za rozmieszczenie ich względem siebie. Możemy w końcu chcieć, aby komentarze były wyświetlane przed tagami. Za pomocą placement file możemy określić ich kolejność. Przykład:

 

 

<Placement>
    <Match DisplayType="Detail">
        <Place Parts_Tags_ShowTags="Footer:1"/>
    </Match>
    <Match DisplayType="Summary">
        <Place Parts_Tags_ShowTags="Footer:4"/>
        <Place Parts_Comments_Count="Footer:5" />
    </Match>
</Placement>

Strefy (zones)

Strefy stanowią wydzieloną część strony, w której można umieszczać tzw. widgety. Strefa jest zatem kontenerem –  może być zatem np. rozsuwana lub rozwijana.

Widget

Widgety stanowią fragment interfejsu graficznego, który może być wstawiony w różne miejsca strony. Przykładem widgeta jest lista ostatnio dodanych wpisów na blogu czy dowolna treść HTML.

Warstwy

Warstwy są zbiorem reguł odpowiedzialnych za wyświetlenie stref wraz z widgetami. Domyślnie mamy utworzone warstwy takie jak: Default, Authenticated, Anonymous, Disabled czy TheHomepage. Na przykład warstwa TheHomepage określa widgety wyświetlane wyłącznie na stronie głównej. Widgety umieszczone na warstwie Anonymous będą widoczne wyłącznie dla użytkowników niezalogowanych.

Bezpieczeństwo

W Orchard istnieje oczywiście podział na użytkowników i role. Rola określa zbiór uprawnień. Jeśli użytkownik należy do danej roli, ma również jej uprawnienia. Domyślnie istnieją następujące role:

  • administrator – pełna kontrola nad zawartością i wszelkimi ustawieniami,
  • redaktor – nie może tworzyć nowej zawartości (Content Item), ale może edytować oraz publikować treść stworzoną przez autorów,
  • moderator – sprawdza zawartość stworzoną przez użytkowników, np. moderuje komentarze,
  • autor – może publikować treść (ale wyłącznie swoją),
  • współpracownik (contributor) – może pisać treść, ale niekoniecznie ma prawa do jej publikacji,
  • anonimowy – użytkownik niezalogowany,
  • zalogowany.

Przykład – stworzenie stronicowanej strony

Załóżmy, że na naszej stronie internetowej chcemy założyć dział zawierający opisy różnych filmów. Każdy film posiada tagi (na podstawie których można w przyszłości dodać wyszukiwarkę) i można go komentować. Ponadto, jeśli lista filmów nie mieści się na pojedynczej stronie, chcemy, aby była możliwość stronicowania. Przyjrzyjmy się krok po kroku, jak możemy tego dokonać w Orchard:

1. Musimy stworzyć nowy typ zawartości (dla filmu). W tym celu wchodzimy na stronę Content Types i klikamy New, a następnie podajemy nazwę nowego typu:

2. Poza podaniem prostej nazwy typu zawartości należy określić jego strukturę. Wiemy, że każdy wpis o filmie będzie miał możliwość dodawania komentarzy, definiowania tagów, wpisywania treści. Dlatego klikamy na odpowiednim przycisku, aby dodać nowe części (content part):

Containable oznacza, że definiowany typ treści będzie mógł być umieszczony na liście, tzn. że nie stanowi osobnej, samodzielnej strony. W następnych krokach zdefiniujemy stronicowaną listę, do której będziemy doczepiać kolejne obiekty typu Film. Z kolei Body przeznaczony jest do wprowadzania treści za pomocą edytora graficznego.

 Ponadto każdy film ma również tytuł – dlatego dodajemy pole „tytuł filmu” (Content Field):

Po wykonaniu powyższych operacji definicja filmu powinna wyglądać następująco:

Klikamy przycisk Save, aby zachować zmiany.

3. W kolejnym kroku stworzymy listę przechowującą wpisy o różnych filmach. W tym celu z głównego panelu wybieramy New -> **List. ** Na wyświetlonej stronie podajemy nazwę strony, liczbę wpisów na pojedynczą stronę oraz inne dane konfiguracyjne:

4. Po zapisaniu listy przechodzimy do zakładki Manage Lists, a następnie klikamy na List Items i Create New Content. Z wyświetlonej listy wybieramy typ zawartości, który chcemy podczepić do listy – Film:

5. Następnie podajemy zawartość dla danego filmu:

Widzimy, że mamy do dyspozycji wszystkie pola zdefiniowane wcześniej (body, tytuł, tagi itp.). Dodajmy jeszcze kilka wpisów, aby móc przetestować stronicowanie. Po dodaniu obiektów możemy zobaczyć rezultaty:

Zakończenie

W artykule zostały przedstawione podstawowe elementy niezbędne do prawidłowej obsługi Orchard CMS. Znając elementy składowe narzędzia, nietrudno będzie odnaleźć się w panelu administracyjnym. Po zapoznaniu się z terminologią frameworku obsługa powinna być już zrozumiała. Najlepszym sposobem na zapoznanie się z możliwościami jest po prostu uruchomienie systemu w przeglądarce i przetestowanie różnych opcji. W następnych artykułach zostaną przedstawione bardziej niskopoziomowe rzeczy, np. implementacja własnych modułów czy zaprojektowanie nowego motywy graficznego.

 


     

Piotr Zieliński

Absolwent informatyki o specjalizacji inżynieria oprogramowania Uniwersytetu Zielonogórskiego. Posiada szereg certyfikatów z technologii Microsoft (MCP, MCTS, MCPD). W 2011 roku wyróżniony nagrodą MVP w kategorii Visual C#. Aktualnie pracuje w General Electric pisząc oprogramowanie wykorzystywane w monitorowaniu transformatorów . Platformę .NET zna od wersji 1.1 – wcześniej wykorzystywał głównie MFC oraz C++ Builder. Interesuje się wieloma technologiami m.in. ASP.NET MVC, WPF, PRISM, WCF, WCF Data Services, WWF, Azure, Silverlight, WCF RIA Services, XNA, Entity Framework, nHibernate. Oprócz czystych technologii zajmuje się również wzorcami projektowymi, bezpieczeństwem aplikacji webowych i testowaniem oprogramowania od strony programisty. W wolnych chwilach prowadzi blog o .NET i tzw. patterns & practices.