diem-about



diem-about

0 1


diem-about

Prezentacja o CMF Diem jako podstawie systemu Polibuda.info

On Github PolibudaInfo / diem-about

Diem

Czym jest Diem

Według autorów?

Na logikę?

nakładka na symfony 1.4 pozwalająca w prost(sz)y sposób osiągać cele związane z zarzadzniem treścią

CMF - content management framework

Zestaw narzedzi ułatwiających zadania związane z zarzadzaniem treścią

  • Boilerplate - (ang.) czynności/funkcje potrzebne ale niepotrzebnie powtarzane
    • obsługa stron
    • obsługa mediów (obrazów, plików), szerzej: obsługa zasobów
    • zarządzanie uprawnieniami
    • tłumaczenia
    • wyszukiwanie
    • optymalizacja na potrzeby silników wyszukiwania (SEO)
  • Możliwości rozbudowy
    • budowania własnych modeli danych i związanej z nimi logiki
    • nowe elementy prezentujące dane i możliwości ich edycji

CMS - content management system

Diem, jako system przeznaczony do zarzadzania treścią oferuje:

  • edycję treści (backend i frontend)
  • komponenty do tworzenia treści
  • system uprawnień
  • narzędzia administracyjne (logi, maintainance)

Dlaczego wybraliśmy Diem

Jak myśleliśmy w momencie wyboru2010

  • Jest oparty na Symfony, który jest najpopularniejszym frameworkiem na rynku +
  • Daje nam dużo rzeczy za darmo: storny, media - zrobimy to szybciej +
  • Jest aktywnie rozwijany - mało, że teraz dostaniemy za darmo. Dostaniemy i w przyszłości. +
  • Jeszcze nie wiemy jak dostosować go do swoich potrzeb. -
  • Czy możliwości jakie daje są tym o co nam chodzi? Czy to nie za dużo? ...

Jak sytuacja wygląda dziś2014... no prawie

  • Symfony w wersji 1 nie jest już rozwijane -
  • ale i tak niewiele straciło ze swoich walorów w porównaniu do np Wordpressa czy Drupala +
  • Diem był dobrym wyborem. Ale nie miał wszystkiego co było potrzebne ...
  • dzięki czemu nauczyliśmy się (mamy to w formie gotowego kodu - przykładów) jak go "hakować" do własnych potrzeb +++

Z czego składa się Diem

czyli sprintem przez dokumentację

Dla maratończyków:http://diem-project.org/ → Documentation → Reference Book

Layout

Czyli układ treści

  • Strefy (zone)
  • Obszary (area)
  • Widgety

Widgety

  • bardziej przyjazne komponenty
  • konfigurowalne z poziomu GUI
  • osadzane na stronie za pomocą drag&drop
  • tworzone automatycznie dla komponentów modułów (config/dm/modules.yml)
  • lub ręcznie za pomocą klas (apps/front/config/dm/widget_types.yml albo plugins/pluginName/config/dm/widget_types.yml)
  • umożliwiają tworzenie strony bez konieczności pisania linijki kodu

Widgety - przykłady

  • tytuł
  • obrazek
  • link
  • tekst (najbardziej uniwersalny i najczęściej używany)
  • menu
  • okruchy (breadcrumbs)
  • formularz wyszukiwania
  • wyniki wyszukiwania

Widgety - GUI

Moduły

Moduł to wyizolowana część aplikacji

zazwyczaj zajmuje się obsługą jakiegoś modelu nanych

jest logicznie związany z modelem danych (schema.yml)

odpowiada mu jeden folder (np moduł w aplikacji admin):

    moduleName                   # nazwa modułu
    └── actions                  # kontrolery
        ├── actions.class.php    #   akcje - modyfikacja danyhc
        └── components.class.php #   komponenty - przedstawienie danych
    └── config                   # konfiguracja (kaskadowa i właściwa tylko dla modułu)
        └── generator.yml        # plik specyficzny dla aplikacji admin. Definiouje formularze i listę
    └── lib                      # klasy - "ciężka" logika. Nie zawsze moduły mają ją tu wyeksportoaną :(
        └── someClassName.php
    └── templates                # widoki. zazwyczaj tylko partiale
        └── _partial_name.php
        
w katalogu app/(front|admin)/modules

Moduły - plik modules.yml

konfigurację modułu definiuje klucz w pliku config/dm/modules.yml

plik jest podzielony na grupy i podgrupy

Content:                # grupa - pierwszy poziom menu w admin
  Foto:                 # podgrupa - drugi poziom menu w admin
    topFoto:            # klucz modułu
      ...
    gallery:
      ...
    galleryCollection:
      ...
        

Moduły - koniguracja

konfigurację modułu definiuje klucz w pliku config/dm/modules.yml

plik jest podzielony na grupy i podgrupy

topFoto:                      # klucz modułu
  model: TopGallery           # nazwa modelu (schema.yml)
  name: TopGallery|TopGalleries # nazwa wyświetlana [opcjonalna]
  page: false                 # czy rekordy reprezentowane są jako strony [true]
  credentials: foto_top       # nazwa uprawnienia, które jest potrzebne do użycia
  credentials: [[ c, c2 ]]    # gdy wiele warunek c lub c2
  credentials: [[ c, c2 ], d] # gdy wiele warunek (c lub c2) ORAZ d
  components: # lista widgetów. Ten klucz musibyć nawet jeśli lista jest pusta
    carousel: # nazwa widgetu
            ...
        

Moduły - więcej konfiguracji

criterion:          # klucz modułu
  parent: group     # klucz modułu nadrzędnego (opcj.)
  model: Criterion  # nazwa modelu
  name: Criterion|Criteria # nazwa wyświetlana l.poj|l.mn
  admin: true       # jest w aplikacji admin [true]
  front: true       # jest w apliakcji front [true]
  page: true        # rekordy mają swoje własne strony [true]
  components:
    listByCategory: # nazwa modułu. Konwencja: list*, show* - specjalne
      filters: [ group ] # filtry modułu list
      cache: true   # czy można cache'ować dynamicznie (z parametrami) [true]
    show:           # komponent pokazujący jeden rekord
      cache: static # czy można cache'ować statycznie (jest nie zmienne)
    showLittle:     # komponent pokazujący jeden rekord ale inaczej
      cache: false  # bez cache
      security:     # pozwala definiować precyzyjnie dostęp do poszczególnych akcji
            ...
        
Pełna konfiguracja w artykule Modules_definition na redmine projektu Diem [snapshot z archive.org - strona nie istnieje]

Moduły - konfuguracja specyficzna dla Polibuda.info

    module:
      components:
        foo:
          form_class: FooForm    # Pozwala definiować formularz edycyjny
                                 # widgetu bez wpisu w widget_types.yml
          public_name: Super Foo # Nazwa wyświetlana widgeta
        

Biblioteka Mediów

Pozwala na wielokrotne używanie obrazków, plików

Składa się z 2 widoków: modułu i panelu

Jak działa biblioteka mediów?

  • przechowuje w bazie strukturę katalogów
  • pozwala umieszczać media w tekście
  • umożliwia dodanie do plików metadanych
  • bez problemu można podmienić źródło pliku
  • generuje miniatury (patrz: dokumentacja dla redaktorów)

Biblioteka mediaów - moduł

  • pozwala nawigować po drzewie katalogów
  • umożliwia zmianę metadanych, położenia i źródła pliku
  • pozwala na upload do wybranego katalogu
  • (na razie) nie pozwala na wyszukiwanie

AHA! można robić moduły które nie korzystają z domyślnej listy!

źródło: http://www.leading2learning.com/wp-content/uploads/2011/08/Boy-with-idea.jpg

Biblioteka mediaów - panel

  • pozwala nawigować po drzewie katalogów
    • ... w formie listy (bo to dodaliśmy, były mało użyteczne kafle)
    • ... z widokiem okruchów (dodaliśmy)
  • pozwala na wyszukiwanie mediów i katalogów (dodaliśmy)
  • pozwala na dodawanie katalogów (dodaliśmy)
  • nie pozwala na zmianę metadanych, położenia i źródła pliku
  • pozwala na upload do wybranego katalogu (dodaliśmy)

AHA! można modyfikować nawet "core'owe" części Diema

źródło: http://www.jet-engine.net/BR715%20(01).jpg

Media - jak ich używamy

drag & drop

… oraz

  • referencje w markdown:
    ![](media:3451 50x50)
  • referencje w widgetach
  • referencje w kodzie
    echo _media($entry->getThumbnail())->size('50x50')
    (patrz: template helpery)

Biblioteka Mediów - jak ją modyfikujemy

  • panel
    • wyszukiwanie po nazwach
    • wyszukiwanie katalogów
    • dodawanie plików i katalogów
    • okruchy (nawigacja)
  • moduł
    • wyszukiwanie referencji do nieistniejących plików (nasz plugin, jeszcze nieopublikowany)
    • multiupload (3rd party plugin)
    • [w planach] definiowanie dowolnych metadanych

Użytkownicy

Co dobrego dla kodera?

Template Helper _media

Q: jak wyświetlić obrazek w HTML?
<img src="http://example.com/image.png" alt="jakiś tekst alternatywny">
Q: jak to zrobić z użyciem PHP? (najgłupiej)
$img = "http://example.com/image.png" // lub skomponowany jakkolwiek inaczej
echo '<img src="' + $img + '" alt="jakiś tekst alternatywny">';
Q: jak robi się to z użyciem symfony1?
echo image_tag('image.png'); // da <img src="http://example.com/image.png"> 

Co się stało? Otoczyliśmy string tagiem. Tu nie ma magii :(

Q: a co jeśli mamy zasób z Biblioteki Mediów
echo _media($imageObject);

Co się stało? Zrobiliśmy tag na podstawie obiektu - tu siedzi magia ;)

Template Helper _link

Z linkowaniem do obiektów jest trochę ciężej

  • jak wyświetla się obiekt - czy mamy jak go wyświetlić? Szablon
  • jaki jest jego adres?
  • przetworzenie adresu: dodanie domeny
  • wytworzenie tagu HTML

Dzięki Diem i stronom możemy w ciemno linkować do obiektów które mają strony

echo _ling($article); // dobrze się czyta ;) 

Template Helpery - możliwości

echo _media($article->image)
->width(40)           // wygeneruje miniaturę o szerokości 40px
// ->size(40,20)      // lub określimy wymiary ściśle
->method('left')      // zachowując to co po lewej stronie obrazka,
                      //ucinając tylko prawą jeśli trzeba
->alt($article->prop) // ustawia attr alt
->filter('greyscale') // nakłada filtr - tu: zmienia na skalę szarości
->overlay(_media(), 'bottom-right') // nałoży inny obrazek w prawym dolnym rogu
->quality(60);         // odda JPEG w jakości 60%

Template Helpery - lista

  • _media
  • _link
  • _table - pozwala generować tabele bez pisania ich tekstem
  • _tag - generuje dowolne tagi