Breathe in Nature. Live in Zen.

Discover a theme designed for harmony — perfect for eco projects, nature blogs, and mindful living websites. Zen is more than a style — it's a way of seeing the world.

Tutorial: System Features w Concrete CMS

Wprowadzenie do systemu Features

System Features w Concrete CMS to mechanizm, który grupuje funkcjonalności tematyczne, rozwiązując typowe problemy związane z blokami i tematami. Zanim zagłębimy się w szczegóły implementacji, warto zrozumieć, jakie wyzwania ten system rozwiązuje.

Problemy, które rozwiązuje system Features

  1. Duża liczba małych plików JS i CSS - wiele bloków powoduje wiele małych żądań o pliki
  2. Trudności w integracji - deweloperzy tematów mają problemy z dodawaniem niestandardowej obsługi bloków bez konfliktów
  3. Brak możliwości dostosowania współdzielonego kodu - funkcje takie jak lightbox są trudne do dostosowania
  4. Sztywno zakodowane biblioteki JS - niektóre bloki, jak Calendar, mają na stałe określone biblioteki
  5. Brak adaptacji do zmiennych CSS specyficznych dla tematu - pliki view.css bloków nie mogą dostosować się do zmiennych tematu

Jak działają Features

Features to logiczne grupowanie wspólnych funkcjonalności, które zapewniają ładowanie niezbędnych plików JS i CSS tylko wtedy, gdy są potrzebne. Oto kluczowe elementy systemu:

Główne cechy Features w Concrete

  • Grupowanie funkcjonalności - bloki korzystające z podobnych funkcji używają tych samych zasobów
  • Oszczędność zasobów - ładowanie tylko tego, co potrzebne
  • Łatwość dostosowania - tematy mogą nadpisywać domyślne zachowania

Przykłady core'owych Features

  • Basics
  • Typography
  • Imagery
  • Calendar
  • Boards
  • Video
  • Maps

Implementacja Features w blokach

Bloki rejestrują wymagane Features poprzez interfejs UsesFeatureInterface. Na przykład:

  • Blok Content korzysta z Features Basics i Typography
  • Blok Gallery korzysta z Feature Imagery
  • Blok Calendar korzysta z Feature Calendar

Rejestr klas Features

Klasa Concrete\Core\Feature\Features zawiera listę wszystkich głównych Features jako stałe, które można wykorzystać w kodzie.

Domyślne zasoby (Base/Fallback Assets)

Jeśli temat nie obsługuje określonej Feature, system używa domyślnych zasobów JS i CSS wbudowanych w Concrete CMS. Na przykład, dla Feature Imagery domyślnym zasobem jest concrete/js/features/imagery/frontend.js.

Features w tematach

Deklarowanie obsługiwanych Features

Tematy mogą określić, które Features obsługują, co eliminuje potrzebę ładowania domyślnych zasobów. Na przykład:

public function getThemeSupportedFeatures() {
    return [
        Features::BASICS,
        Features::TYPOGRAPHY,
        Features::IMAGERY,
    ];
}

BedrockThemeTrait

Używanie BedrockThemeTrait w klasie PageTheme automatycznie obsługuje Features Basics i Typography. Tematy mogą rozszerzyć tę funkcjonalność, dodając wsparcie dla dodatkowych Features.

Praktyczny przykład: Implementacja Feature Imagery

Dodanie obsługi Feature Imagery do tematu pozwala na:

  • Dostosowanie zachowań bloków bazujących na obrazach
  • Uniknięcie ładowania niepotrzebnych plików JS i CSS

Krok 1: Przygotowanie środowiska testowego

  1. Dodaj nową stronę do tematu
  2. Umieść wszystkie typy bloków korzystające z Feature Imagery:
    • Image Slider
    • Hero Image
    • Gallery
    • Lightbox feature image

Krok 2: Wyłączenie domyślnych zasobów

W klasie PageTheme zaimplementuj metodę getThemeSupportedFeatures():

use Concrete\Core\Feature\Features;

public function getThemeSupportedFeatures() {
    return [
        Features::BASICS,
        Features::TYPOGRAPHY,
        Features::IMAGERY,
    ];
}

Krok 3: Integracja SCSS i JavaScript dla Feature Imagery

SCSS:

  1. Utwórz plik _imagery.scss w assets/scss/features/imagery
  2. Zaktualizuj main.scss, aby importował _imagery.scss
  3. Zaimportuj podstawowe style Imagery z Bedrock
// W pliku _imagery.scss
@import '~@concretecms/bedrock/assets/imagery/scss/frontend/lightbox/lightbox';
@import '~@concretecms/bedrock/assets/imagery/scss/frontend/gallery/gallery';
@import '~@concretecms/bedrock/assets/imagery/scss/frontend/hero-image';

JavaScript:

  1. Edytuj plik assets/js/main.js
  2. Zaimportuj JavaScript Imagery z Bedrock:
import '@concretecms/bedrock/assets/imagery/js/frontend';

Zaawansowany przykład: Dodanie efektu Parallax do Hero Image

Krok 1: Instalacja biblioteki Simple Parallax

npm i simple-parallax-js

Krok 2: Dostosowanie wyglądu za pomocą SCSS

Utwórz plik _hero-image.scss i dostosuj styl bloku Hero Image:

.ccm-block-hero-image {
    .ccm-block-hero-image-text {
        color: $body-bg;
        font-size: 2rem;
    }
}

Krok 3: Implementacja efektu Parallax w JavaScript

W pliku main.js dodaj:

import simpleParallax from 'simple-parallax-js';

var images = document.querySelectorAll('.ccm-block-hero-image-image');
new simpleParallax(images, {scale: 1.5});

Zaawansowany przykład: Dostosowanie Image Slider z Owl Carousel

Krok 1: Instalacja bibliotek

npm i owl.carousel
npm i animate.css

Krok 2: Aktualizacja importów JavaScript i CSS

W main.js:

import 'magnific-popup'
import '@concretecms/bedrock/assets/imagery/js/frontend/lightbox'
import '@concretecms/bedrock/assets/imagery/js/frontend/gallery'

// Owl Carousel
import 'owl.carousel'
$(".owl-carousel").owlCarousel({
    // Konfiguracja Owl Carousel
});

W _imagery.scss:

@import '~@concretecms/bedrock/assets/imagery/scss/frontend/lightbox/lightbox';
@import '~@concretecms/bedrock/assets/imagery/scss/frontend/gallery/gallery';
@import '~@concretecms/bedrock/assets/imagery/scss/frontend/hero-image';

// Owl Carousel
@import "~animate.css/animate";
@import "~owl.carousel/dist/assets/owl.carousel";
@import "~owl.carousel/dist/assets/owl.theme.default";

Krok 3: Dostosowanie szablonu widoku Image Slider

Utwórz plik application/themes/twoj_temat/blocks/image_slide/view.php z odpowiednim znacznikiem HTML dla Owl Carousel.

Podsumowanie

System Features w Concrete CMS zapewnia elastyczny sposób organizowania i dostosowywania funkcjonalności bloków przy jednoczesnym zachowaniu optymalnej wydajności. Dzięki niemu:

  1. Tematy mogą definiować własne implementacje wspólnych funkcjonalności
  2. Zasoby są ładowane tylko wtedy, gdy są potrzebne
  3. Deweloperzy mogą łatwo rozszerzać i dostosowywać istniejące funkcjonalności

Wdrażając system Features w swoim temacie, zyskujesz pełną kontrolę nad wyglądem i działaniem bloków, jednocześnie utrzymując wydajność i spójność Twojej witryny.

Klasa Features w podanym kodzie PHP to rejestr (registry) służący do definiowania i organizowania cech (features) używanych przez system bloków i zasobów w Concrete CMS. Ta klasa zawiera stałe (const), które reprezentują różne funkcje systemu, zarówno podstawowe, jak i dodatkowe. Oto szczegóły:

Opis Klasy

  • Cel: Klasa Features została zaprojektowana jako centralne miejsce do definiowania funkcji wspieranych przez system. Dzięki temu:

    • Bloki w systemie mogą deklarować, jakie funkcje są wymagane do ich działania.
    • Motywy (themes) mogą określić, które funkcje obsługują, co pozwala na bardziej elastyczne zarządzanie zasobami (np. ładowanie odpowiednich assetów).
    • Jeśli motyw nie obsługuje danej funkcji, Concrete CMS automatycznie załaduje zasoby domyślne, aby zapewnić poprawne działanie bloku.
  • Podział funkcji:

    • Fundamentalne: Funkcje podstawowe, które są kluczowe dla działania systemu.
    • Dodatkowe: Funkcje opcjonalne, które zapewniają dodatkowe możliwości (np. wsparcie dla kalendarzy, map, galerii zdjęć itp.).

Kluczowe Stałe w Klasie

Każda stała reprezentuje unikalną funkcję systemu i jej identyfikator (np. PAGES, FILES).

Fundamentalne funkcje:

  1. PAGES - Obsługa stron.
  2. FILES - Obsługa przesyłania plików i menedżera plików.
  3. USERS - Obsługa użytkowników i autoryzacji.
  4. STACKS - Obsługa stosów (stacks).
  5. EXPRESS - Obsługa funkcji Express.
  6. PACKAGES - Obsługa instalacji pakietów.
  7. BASICS - Podstawowe zasoby front-endowe (np. bloki treści, pliki).
  8. BOARDS - Obsługa tablic (boards).

Dodatkowe funkcje:

  1. TYPOGRAPHY - Obsługa typografii (np. tytuły, przyciski, kolory).
  2. CALENDAR - Obsługa kalendarzy.
  3. NAVIGATION - Obsługa nawigacji (np. listy stron, autonav).
  4. DOCUMENTS - Obsługa dokumentów (publiczny menedżer plików).
  5. SOCIAL - Obsługa sieci społecznościowych.
  6. FORMS - Obsługa formularzy i interfejsów do wprowadzania danych.
  7. MULTILINGUAL - Obsługa wielojęzyczności (np. struktury drzew językowych).
  8. VIDEO - Obsługa wideo.
  9. IMAGERY - Obsługa obrazów (np. galerie, lightboxy, slidery).
  10. MARKETPLACE - Obsługa marketplace Concrete CMS.
  11. TAXONOMY - Obsługa tagów, tematów.
  12. TESTIMONIALS - Obsługa opinii użytkowników.
  13. CONVERSATIONS - Obsługa konwersacji.
  14. FAQ - Obsługa sekcji FAQ.
  15. SEARCH - Obsługa wyszukiwania.
  16. STAGING - Obsługa paska stagingu (np. dla trybu staging).
  17. MAPS - Obsługa map.
  18. POLLS - Obsługa ankiet.
  19. ACCORDIONS - Obsługa akordeonów.
  20. ACCOUNT - Obsługa zarządzania kontami użytkowników.
  21. DESKTOP - Obsługa funkcji desktopowych (np. lista szkiców, "Czeka na mnie").
  22. PROFILE - Obsługa profili użytkowników na froncie.

Zastosowanie

  • Bloki: Bloki mogą deklarować, że wymagają określonych funkcji (np. blok kalendarza wymaga funkcji CALENDAR).
  • Motywy: Motywy mogą określić, które funkcje obsługują. Jeśli motyw obsługuje funkcję, domyślne zasoby nie są ładowane, co przyspiesza czas renderowania strony.
  • Modularność: W przyszłości klasa może być używana do stworzenia w pełni modułowego systemu instalacji Concrete CMS.

Podsumowując, klasa Features służy jako centralne miejsce do definiowania i zarządzania funkcjami systemu, umożliwiając elastyczność i modularność w Concrete CMS.