Symphony CMS

Ein gutes standardkonformes Content Management System ist Symphony CMS.

Demo-Pages

Installation

  • aptitude install apache2 libapache2-mod-php5 php5-xsl php5-mysql php5-curl mysql-server git-core

mysql

mysql> create database symphony;
mysql> grant all on symphony.* to symphony@localhost identified by 'P@ssw0rd';
mysql> flush privileges;

bash

mkdir -p /var/www/domains/ww1.tiri.de
cd !$
  • Die aktuelle Symphony CMS Basis soll ins Verzeichnis html

bash

git clone git://github.com/symphony/symphony-2.git html
Initialized empty Git repository in /data/var/www/domains/ww1.tiri.de/html/.git/
remote: Counting objects: 4699, done.
remote: Compressing objects: 100% (1258/1258), done.
remote: Total 4699 (delta 3496), reused 4611 (delta 3408)
Receiving objects: 100% (4699/4699), 928.27 KiB | 190 KiB/s, done.
Resolving deltas: 100% (3496/3496), done.

bash

cd !$
git submodule update --init
Submodule 'extensions/debugdevkit' (git://github.com/symphony/debugdevkit.git) registered for path 'extensions/debugdevkit'
Submodule 'extensions/export_ensemble' (git://github.com/pointybeard/export_ensemble.git) registered for path 'extensions/export_ensemble'
Submodule 'extensions/jit_image_manipulation' (git://github.com/pointybeard/jit_image_manipulation.git) registered for path 'extensions/jit_image_manipulation'
Submodule 'extensions/maintenance_mode' (git://github.com/pointybeard/maintenance_mode.git) registered for path 'extensions/maintenance_mode'
Submodule 'extensions/markdown' (git://github.com/pointybeard/markdown.git) registered for path 'extensions/markdown'
Submodule 'extensions/profiledevkit' (git://github.com/symphony/profiledevkit.git) registered for path 'extensions/profiledevkit'
Submodule 'extensions/selectbox_link_field' (git://github.com/pointybeard/selectbox_link_field.git) registered for path 'extensions/selectbox_link_field'
Initialized empty Git repository in /data/var/www/domains/ww1.tiri.de/html/extensions/debugdevkit/.git/
remote: Counting objects: 211, done.
remote: Compressing objects: 100% (188/188), done.
remote: g objects:  50% (106/211)    0 (delta 0)Receiving objects:  32% (68/211)   
Receiving objects: 100% (211/211), 44.27 KiB, done.
Resolving deltas: 100% (99/99), done.
Submodule path 'extensions/debugdevkit': checked out '89714d6ee918839fa6f8bad6bf9976ff54acc414'
Initialized empty Git repository in /data/var/www/domains/ww1.tiri.de/html/extensions/export_ensemble/.git/
remote: Counting objects: 90, done.
remote: Compressing objects: 100% (89/89), done.
remote: Total 90 (delta 36), reused 0 (delta 0)
Receiving objects: 100% (90/90), 18.33 KiB, done.
Resolving deltas: 100% (36/36), done.
Submodule path 'extensions/export_ensemble': checked out '766485eb43715ce6be19f5b58e018172c7e60656'
Initialized empty Git repository in /data/var/www/domains/ww1.tiri.de/html/extensions/jit_image_manipulation/.git/
remote: Counting objects: 87, done.
remote: Compressing objects: 100% (87/87), done.
remote: Total 87 (delta 40), reused 0 (delta 0)
Receiving objects: 100% (87/87), 18.27 KiB, done.
Resolving deltas: 100% (40/40), done.
Submodule path 'extensions/jit_image_manipulation': checked out 'ac8545df3ed29ef0549a87d043956fa6aa951da8'
Initialized empty Git repository in /data/var/www/domains/ww1.tiri.de/html/extensions/maintenance_mode/.git/
remote: Counting objects: 14, done.
remote: Compressing objects: 100% (14/14), done.
remote: Total 14 (delta 5), reused 0 (delta 0)
Receiving objects: 100% (14/14), done.
Resolving deltas: 100% (5/5), done.
Submodule path 'extensions/maintenance_mode': checked out '157d42f37588ea39515606694362281bab89ec9c'
Initialized empty Git repository in /data/var/www/domains/ww1.tiri.de/html/extensions/markdown/.git/
remote: Counting objects: 29, done.
remote: Compressing objects: 100% (29/29), done.
remote: Total 29 (delta 11), reused 0 (delta 0)
Receiving objects: 100% (29/29), 53.29 KiB | 70 KiB/s, done.
Resolving deltas: 100% (11/11), done.
Submodule path 'extensions/markdown': checked out '98683c3f56871b52a2d9dc42ceb7648f8f16a5c3'
Initialized empty Git repository in /data/var/www/domains/ww1.tiri.de/html/extensions/profiledevkit/.git/
remote: Counting objects: 16, done.
remote: Compressing objects: 100% (11/11), done.
remote: Total 16 (delta 3), reused 0 (delta 0)
Receiving objects: 100% (16/16), done.
Resolving deltas: 100% (3/3), done.
Submodule path 'extensions/profiledevkit': checked out '7a723f2ae7431276de7ff8353beac70e8fe0cb57'
Initialized empty Git repository in /data/var/www/domains/ww1.tiri.de/html/extensions/selectbox_link_field/.git/
remote: Counting objects: 121, done.
remote: Compressing objects: 100% (120/120), done.
remote: Total 121 (delta 49), reused 0 (delta 0)
Receiving objects: 100% (121/121), 23.44 KiB, done.
Resolving deltas: 100% (49/49), done.
Submodule path 'extensions/selectbox_link_field': checked out 'd2787bb0ecafed7f446c62d3c562bd8c5b8f03ad'

Zur Installation empfiehlt es sich, Verzeichnisrechte freizügig zu gestalten.

bash

chmod 777 symphony .
chmod -R 777 workspace

Jetzt die Installation über die URL http://localhost/install.php durchführen.

Nach der Installation wieder etwas restriktiver.

bash

chmod 755 symphony .
rm install.php install.sql workspace/install.sql update.php

Ggf. müssen noch Verzeichnisse im workspace angelegt werden.

bash

mkdir -p workspace/{utilities,data-sources,events,pages}
mkdir -p workspace/{images,css,js}

Default User

  • Au Thor (Username: author)
  • Deve Loper (Username: developer)

Tutorial

Extensions

Zunächst sind alle Extensions zu aktivieren. Weitere Extensions können bei Bedarf nachinstalliert werden, eine sinnvolle zusätzliche Basis Extension ist das Filemanager Modul.

Initialized empty Git repository in /data/var/www/domains/ww1.tiri.de/html/extensions/filemanager/.git/
remote: Counting objects: 107, done.
remote: Compressing objects: 100% (106/106), done.
remote: Total 107 (delta 59), reused 0 (delta 0)
Receiving objects: 100% (107/107), 23.05 KiB, done.
Resolving deltas: 100% (59/59), done.
Initialized empty Git repository in /data/var/www/domains/ww1.tiri.de/html/extensions/order_entries/.git/
remote: Counting objects: 94, done.
remote: Compressing objects: 100% (82/82), done.
remote: Total 94 (delta 37), reused 0 (delta 0)
Receiving objects: 100% (94/94), 18.48 KiB, done.
Resolving deltas: 100% (37/37), done.

Database Manipulator

Initialized empty Git repository in /data/var/www/domains/ww1.tiri.de/html/extensions/databasemanipulator/.git/
remote: Counting objects: 16, done.
remote: Compressing objects: 100% (16/16), done.
remote: Total 16 (delta 3), reused 0 (delta 0)
Receiving objects: 100% (16/16), 5.08 KiB, done.
Resolving deltas: 100% (3/3), done.

Sections

Die Sektionen werden in der Administrationsoberfläche angezeigt und spiegeln einzelne Elemente der Website wieder.

Navigation Group erzeugt einen Menüpunkt in der Admin-GUI, der Name ist ein Untermenü davon. Symphony Sections

Components

Komponenten sind XSL Datenquellen, die die Daten für die einzelnen Seiten bereitstellen. Diese sind entsprechend zu erstellen. Data Sources sind PHP-Skripte, die im Dateisystem abgelegt sind und somit in Symphony CMS eingebunden werden können. Wichtig ist hierbei, dass gültiges XML zurückgegeben wird.

  • Utilities liegen unter workspace/utilities.
  • Data-Sources liegen unter workspace/data-sources.
  • Events liegen unter workspace/events.

FIXME

Verknüpfung von Datenquellen

Möchte man beispielsweise nur die Artikel eines Hauptartikels anzeigen lassen, so sind zwei Data-Sources nötig.

  • Hauptartikel:
    • Name: Hauptartikel
    • Parameter-Output: SystemID
  • Article:
    • Parameter Output: SystemId –> $ds-article
  • Article-by-Hauptartikel: Source: Article
    • Filter Article by: {$ds-hauptartikel}
    • Publish: Yes
    • Parameter-Output (zur Kontrolle):
      • System-ID ($ds-article-by-hauptartikel)

Styles

Initialized empty Git repository in /data/var/www/domains/ww1.tiri.de/html/workspace/assets/.git/
remote: Counting objects: 211, done.
remote: Compressing objects: 100% (181/181), done.
remote: Total 211 (delta 105), reused 0 (delta 0)
Receiving objects: 100% (211/211), 194.44 KiB | 103 KiB/s, done.
Resolving deltas: 100% (105/105), done.

Tips & Tricks

XSL   ausgeben

xml

<xsl:text disable-output-escaping="yes">&amp;nbsp;</xsl:text>

Artikel-Navigation

  • Anzeige des Vorgängers und des Nachfolgers innerhalb der Seite.

xml

<xsl:template name="article-items">
     <xsl:if test="$a = ./title/@handle">
        <div class="grid_12">
                <div class="box">
                        <h2><a><xsl:value-of select="title"/></a></h2>
                        <div id="paragraphs" class="block">
                        <p>...</p>
                            <p>
                            <a href="{$root}/{$current-page}/{./preceding-sibling::entry[1]/title/@handle}"><xsl:value-of select="./preceding-sibling::entry[1]/title"/></a> |
                            <a href="{$root}/{$current-page}/{./following-sibling::entry[1]/title/@handle}"><xsl:value-of select="./following-sibling::entry[1]/title"/></a>
                            </p>
                        </div>
                </div>
        </div>
     </xsl:if> 
</xsl:template>

Archive.XSL

  • Datenquelle erstellen
    • Essentials: Name: Archive
    • Source: Entries
  • Filter Entries by:
    • Publish :: Yes
  • Sort by: Date :: descending
  • XML Output: Group by Date
  • Included Elements: title, section, date

xml

<xsl:template match="data">
	<div class="grid_12">
		<div class="box table">
			<h2><a>Entries Archive</a></h2>
			<div class="block">
				<table>
				<thead>
					<tr>
					<th><a>Date</a></th>
					<th><a>Section</a></th>
					<th><a>Title</a></th>
					<!-- th><a>Comments</a></th -->
					</tr>
				</thead>
				<tbody>
					<xsl:choose>
						<xsl:when test="$b">
							<xsl:for-each select="archive/year[@value = $a]/month[@value = $b]/entry">
								<xsl:call-template name="entries-archive-list"/>
							</xsl:for-each>
						</xsl:when>
						<xsl:when test="$a">
							<xsl:for-each select="archive/year[@value = $a]/month/entry">
								<xsl:call-template name="entries-archive-list"/>
							</xsl:for-each>
						</xsl:when>
						<xsl:otherwise>
							<xsl:for-each select="archive/year/month/entry">
								<xsl:call-template name="entries-archive-list"/>
							</xsl:for-each>
						</xsl:otherwise>
					</xsl:choose>
				</tbody>
				</table>
			</div>
		</div>
	</div>

	<div class="grid_4">
		<div class="box menu">
			<h2><a>Archive</a></h2>
			<div class="block">
				<ul class="section menu">
					<xsl:for-each select="archive/year">
						<xsl:call-template name="archive-by-date"/>
					</xsl:for-each>
				</ul>
			</div>
		</div>
	</div>
        <div class="clear" />
</xsl:template>

<xsl:template name="entries-archive-list">
	<tr>
		<td>
			<xsl:call-template name="format-date">
				<xsl:with-param name="date" select="date"/>
				<xsl:with-param name="format" select="'x m Y'"/>
			</xsl:call-template>
		</td>

		<td><xsl:value-of select="section/item"/></td>
		<td><a href="{$root}/{section/item/@handle}/{title/@handle}/"><xsl:value-of select="title"/></a></td>
		<!-- td><a href="{$root}/{../../@value}/{../@value}/{substring(date, 9, 2)}/{title/@handle}/"><xsl:value-of select="title"/></a></td -->
		<!-- td class="none">0</td -->
	</tr>
</xsl:template>
	
<xsl:template name="archive-by-date">
	<li>
		<a href="{$root}/{$current-page}/{@value}/"><xsl:value-of select="@value"/></a>

		<ul class="menu">
			<xsl:for-each select="month">
				<li>
					<a href="{$root}/{$current-page}/{../@value}/{@value}/">
						<xsl:call-template name="format-month">
							<xsl:with-param name="month" select="@value"/>
							<xsl:with-param name="format" select="'M'"/>
						</xsl:call-template>
						<xsl:text> </xsl:text>

						<xsl:value-of select="../@value"/>
					</a>
				</li>
			</xsl:for-each>
		</ul>
	</li>
</xsl:template>

substring-before/after

xml

<title>
    <xsl:choose>
        <xsl:when test="contains($page-title, '&amp;#38;')">
            <xsl:value-of select="substring-before($page-title, '&amp;#38;')" />
            <xsl:text>&#38;</xsl:text>
            <xsl:value-of select="substring-after($page-title, '&amp;#38;')" />
        </xsl:when>
        <xsl:otherwise>
            <xsl:value-of select="$page-title" />
        </xsl:otherwise>
    </xsl:choose>
 </title>
 
wissen/linux/symphony-cms-xml-xslt-installation.txt · Zuletzt geändert: 02.10.2009 23:14 von tirili
 
Recent changes RSS feed Donate Valid XHTML 1.0 Valid CSS Recent cached RSS feed cacert-signed web site: inhalt.serviert.de