Skip to content

Latest commit

 

History

History
384 lines (298 loc) · 8.66 KB

File metadata and controls

384 lines (298 loc) · 8.66 KB

Installation Guide

Schritt-für-Schritt Installation des SuluContentTypesBundle

Voraussetzungen

  • Sulu CMS 2.6+
  • PHP 8.1+
  • Composer
  • Node.js & npm

Installation

Option 1: Via Composer (empfohlen, nach Veröffentlichung)

composer require manuxi/sulu-content-types-bundle

Option 2: Lokale Installation (für Entwicklung)

  1. Bundle-Verzeichnis erstellen:
mkdir -p packages/manuxi
cd packages/manuxi
  1. Bundle-Dateien kopieren:
# Entpacke SuluContentTypesBundle.zip hier
# oder clone von GitHub:
git clone https://github.com/manuxi/SuluContentTypesBundle.git
  1. Composer-Repository hinzufügen:

In der composer.json deines Projekts:

{
    "repositories": [
        {
            "type": "path",
            "url": "packages/manuxi/SuluContentTypesBundle"
        }
    ],
    "require": {
        "manuxi/sulu-content-types-bundle": "@dev"
    }
}
  1. Bundle installieren:
composer install

Konfiguration

1. Bundle registrieren

In config/bundles.php:

<?php

return [
    // ... andere Bundles
    Manuxi\SuluContentTypesBundle\ManuxiSuluContentTypesBundle::class => ['all' => true],
];

2. Admin-Assets registrieren

In assets/admin/packages.json:

{
    "manuxi-content-types": {
        "path": "../../vendor/manuxi/sulu-content-types-bundle/src/Resources/js/containers/Form/fields",
        "main": "index.js"
    }
}

Für lokale Installation:

{
    "manuxi-content-types": {
        "path": "../../packages/manuxi/SuluContentTypesBundle/src/Resources/js/containers/Form/fields",
        "main": "index.js"
    }
}

3. Assets kompilieren

cd assets/admin
npm install
npm run build

4. Symfony Cache leeren

bin/console cache:clear

Verifizierung

Services prüfen

bin/console debug:container | grep manuxi

Erwartete Ausgabe:

manuxi.sulu_content_types.content.type.number_with_default
manuxi.sulu_content_types.content.type.color_select
manuxi.sulu_content_types.content.type.slider_range

Content Types prüfen

bin/console debug:container --tag=sulu.content.type | grep -A2 "number_with_default\|color_select\|slider_range"

Erste Schritte

1. Template erstellen

Erstelle ein neues Template in config/templates/pages/:

<?xml version="1.0" ?>
<template xmlns="http://schemas.sulu.io/template/template"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://schemas.sulu.io/template/template http://schemas.sulu.io/template/template-1.0.xsd">

    <key>test_content_types</key>
    <view>pages/test</view>
    <controller>Sulu\Bundle\WebsiteBundle\Controller\DefaultController::indexAction</controller>

    <meta>
        <title lang="de">Test: Content Types</title>
        <title lang="en">Test: Content Types</title>
    </meta>

    <properties>
        <property name="title" type="text_line" mandatory="true">
            <meta>
                <title lang="de">Titel</title>
                <title lang="en">Title</title>
            </meta>
        </property>

        <!-- Test NumberWithDefault -->
        <property name="test_number" type="number_with_default">
            <meta>
                <title lang="de">Test Nummer</title>
                <title lang="en">Test Number</title>
            </meta>
            <params>
                <param name="default_value" value="42"/>
            </params>
        </property>

        <!-- Test ColorSelect -->
        <property name="test_color" type="color_select">
            <meta>
                <title lang="de">Test Farbe</title>
                <title lang="en">Test Color</title>
            </meta>
            <params>
                <param name="values" type="collection">
                    <param name="primary" value="primary:#0d6efd">
                        <meta>
                            <title lang="de">Primär</title>
                            <title lang="en">Primary</title>
                        </meta>
                    </param>
                    <param name="success" value="success:#198754">
                        <meta>
                            <title lang="de">Erfolg</title>
                            <title lang="en">Success</title>
                        </meta>
                    </param>
                    <param name="danger" value="danger:#dc3545">
                        <meta>
                            <title lang="de">Gefahr</title>
                            <title lang="en">Danger</title>
                        </meta>
                    </param>
                </param>
            </params>
        </property>

        <!-- Test ColorSelect with palette service -->
        <property name="test_color" type="color_select">
            <meta>
                <title lang="de">Test Farbe</title>
                <title lang="en">Test Color</title>
            </meta>
            <params>
                <param name="values"
                       type="expression"
                       value="service('sulu_content_types.color_palette_provider').getValues('bootstrap')"
                />
                <param name="default_value"
                       type="expression"
                       value="service('sulu_content_types.color_palette_provider').getDefaultValue('bootstrap')"
                />
            </params>
        </property>

        <!-- Test SliderRange -->
        <property name="test_slider" type="slider_range">
            <meta>
                <title lang="de">Test Slider</title>
                <title lang="en">Test Slider</title>
            </meta>
            <params>
                <param name="min" value="0"/>
                <param name="max" value="100"/>
                <param name="default_value" value="50"/>
            </params>
        </property>
    </properties>
</template>

2. Twig-Template erstellen

Erstelle templates/pages/test.html.twig:

{% extends "base.html.twig" %}

{% block content %}
    <h1>{{ content.title }}</h1>
    
    <div class="test-results">
        <p>Number: {{ content.test_number }}</p>
        <p>Color: <span class="badge bg-{{ content.test_color }}">{{ content.test_color }}</span></p>
        <p>Slider: {{ content.test_slider }}%</p>
    </div>
{% endblock %}

3. Seite erstellen

  1. Gehe zu Sulu Admin (/admin)
  2. Erstelle eine neue Seite
  3. Wähle Template "Test: Content Types"
  4. Teste die Content Types!

Hinweis

Wie im Beispiel oben zu sehen ist, kann eine eigene Farbpalette für den ColorSelector eingebunden werden. Vorhandene Paletten:

- bootstrap
- bootstrap_text
- bootstrap_bg
- bootstrap_emphasis
- custom
- status

Eigene Paletten können erstellt werden: Erstelle config/packages/sulu_content_types.yaml:

sulu_content_types:
    color_palettes:
        custom:
            primary: '#0d6efd'

In der xml dann einfach benutzen:

<param name="values"
       type="expression"
       value="service('sulu_content_types.color_palette_provider').getValues('custom')"
/>
<param name="default_value"
       type="expression"
       value="service('sulu_content_types.color_palette_provider').getDefaultValue('custom')"
/>

Troubleshooting

Problem: "Content type not found"

Lösung:

bin/console cache:clear
bin/console debug:container | grep content.type

Problem: JavaScript-Fehler in Admin

Lösung:

cd assets/admin
npm run build
bin/console cache:clear

Öffne Browser-Console (F12) und prüfe auf Fehler.

Problem: "Service not found"

Lösung:

  1. Prüfe config/bundles.php - Bundle registriert?
  2. Prüfe Namespace in PHP-Dateien
  3. composer dump-autoload
  4. Cache leeren

Problem: Assets werden nicht geladen

Lösung:

  1. Prüfe assets/admin/packages.json - Pfad korrekt?
  2. npm install in assets/admin
  3. npm run build
  4. Browser-Cache leeren (Ctrl+Shift+R)

Deinstallation

1. Bundle aus bundles.php entfernen

2. packages.json bereinigen

Entferne den manuxi-content-types Eintrag.

3. Assets neu kompilieren

cd assets/admin
npm run build

4. Composer

composer remove manuxi/sulu-content-types-bundle

5. Cache leeren

bin/console cache:clear

Support


Nächste Schritte