Modul Content

Das Modul Content stellt die Editierfunktion für Texte bereit.

Setup

Hier werden die möglichen Einstellungen im Setup des Content-Moduls erklärt. Das Setup erreich man über den Pfad „Einstellungen“ → „Projekt Verwaltung“ → „Modul-Einstellungen“ → „content“

Verweise

Standardmäßig werden 5 Verweistypen ausgeliefert, welche beim Einfügen eines Links oder eines Bildes ausgewählt werden können:

  • Interner Verweis - Verknüpfung auf einer Seite in der Seiten-Navigation
  • Datei - Eine Datei aus dem Dateimanager zum Download anbieten
  • Externe Adresse - Link auf eine andere Adresse / Seite im WWW
  • Anker - Verweis auf eine Sprungmarke in einer internen Seite
  • E-Mail Adresse - Verweis ruft beim klicken das E-Mail Programm auf, um eine Nachricht an die eingegebene Adresse zu schicken

zusätzliche Verweistypen

Es ist ab myty 4.1.2 möglich, die standardmäßig ausgelieferten Verweistypen um Eigene zu erweitern. Dabei ist jeder Verweistyp eine PHP-Klasse, welche von der Klasse „tyLinkTypePlugin“ erbt.

Um einen neuen Verweistyp zu definieren gibt man im Setup einerseits die Datei an, welche die abgeleitete Klasse enthält und den Klassennamen, um diese Klasse zu laden.

Die Deklaration sieht folgendermaßen aus:

class linkType_custom extends tyLinkTypePlugin {
  // Typ-Identifikator des Plugins
  protected $type = 'custom';
  // Bezeichnung des Verweistyps
  protected $caption = 'Benutzerdefinierter Link';
  // CSS-Klassenname für den erzeugten <a/> Tag (optional)
  protected $classStr = 'custom-link-class';
 
  /* Implementierung der benötigten Methoden */
}

Eine Auflistung der verfügbaren Methoden finden Sie hier: classty_link_type_plugin.html

Beispiel für einen zusätzlichen Verweistyp

Das folgende Beispiel zeigt, wie man einen Link auf eine interne Seite auswählen kann und verändert die Ausgabe des Links so, dass in den Vorlagen über das Attribut rel=„lightbox“ ein Javascript-Plugin angebunden werden kann, welches die Seite dann in einem Popin öffnet.

<?php
include_once($GLOBALS['mytyInstallPath'].'/classes/widget/widgetsmartnavigation.class.php');
 
class linkType_popin extends tyLinkTypePlugin {
	protected $type = 'popin';
	protected $caption = 'Im Popin öffnen';
	protected $classStr = 'myty-popin-link';
 
	private $widget = null;
 
	public function __construct(&$options = null) {
		$this->widget = new WidgetSmartNavigation('popin_link');
		$this->widget->setContainerAttributes(array('class'=>'mytyLinkWidget'));
		$this->widget->setSettings('{
			onclick : function(item) {
				selectRadioByType(item, \'popin\');
			}
		}');
		parent::__construct($options);
	}
 
	/**
	 * returns additional contents for head tag like javascript tags or meta informations
	 * @return string
	 */
	public function getHeadContent() {
		ob_start();
		?>
		<script type="text/javascript">
		var checkPopinLink = function(anchorNode, href) {
			var linkType = null;
			if( anchorNode.className.indexOf('<?php echo $this->classStr;?>') >= 0 || href.indexOf('#popin') > 0 ) {
				var topicGetter = "topic=";
				if (href.lastIndexOf(topicGetter) < 0) {
					linkType = 'ajax';
					ajaxCheck('action=getTopicByURL&url='+encodeURIComponent(href), function(response) {
						linkType = 'web';
						var findTopic = false;
 
						if (response != '') {
							linkType = '<?php echo $this->type;?>';
							var widgetInstance = $ty('#<?php echo $this->widget->getContainerId();?>').getInstance('nav:smartnav');
							widgetInstance.selectItemByTopic(response);
						} else {
							alert('<?php echo ty_("Das Topic der internen Seite wurde nicht gefunden. Bitte wählen Sie ein neues Verweisziel aus.")?>');
							if(href.indexOf("http://<?php echo $_SERVER['SERVER_NAME'] ?>") != 0) {
								href = "http://<?php echo $_SERVER['SERVER_NAME'] ?>" + href;
							}
						}
						if (linkType == "web") document.getElementById("extern").value = href;
						selectRadioByType(null, linkType);
					});
				} else {
					// Topic über GetterVars
					var startPos = href.lastIndexOf(topicGetter) + topicGetter.length;
					var topic = href.slice(startPos);
					var indexAnd = topic.indexOf("&");
					// weitere Getter abschneiden
					if (indexAnd != -1) var topic = topic.slice(0, indexAnd);
					var indexAnd = topic.indexOf("#");
					// weitere Getter abschneiden
					if (indexAnd != -1) var topic = topic.slice(0, indexAnd);
					linkType = 'web';
 
					if (topic.length > 0) {
						linkType = '<?php echo $this->type;?>';
						var container = $ty('#<?php echo $this->widget->getContainerId();?>');
						var widgetInstance = container.getInstance('nav:smartnav');
						widgetInstance.selectItemByTopic(topic);
					} else {
						alert('<?php echo ty_("Das Topic der internen Seite wurde nicht gefunden. Bitte wählen Sie ein neues Verweisziel aus.")?>');
						if(href.indexOf("http://<? echo $_SERVER['SERVER_NAME'] ?>") != 0) {
							href = "http://<? echo $_SERVER['SERVER_NAME'] ?>" + href;
						}
					}
				}
			}
			return linkType;
		}
 
		var buildAnchorNode = function(anchorNode) {
			var anchorNode = $ty(anchorNode);
			anchorNode.attr('rel', 'lightbox');
		}
 
		$ty(function(){
			<?php echo $this->widget->getInitializationCode();?>
		});
		</script>
		<?php
		return ob_get_clean();
	}
 
	/**
	 * returns the name of a function that will be called to scan the link node for current link type
	 * this function must be callable in global context
	 *
	 * @return string
	 */
	public function linkCheckCall() {
		return 'checkPopinLink';
	}
 
	/**
	 * returns code of javascript to check form values before submitting them
	 *
	 * @return string javascript w/o script tags
	 */
	public function formCheckCall() {
		ob_start();
		?>
		var linkTypeCheckbox = null;
		var form = {};
		if( document.linkSubmit ) form = document.linkSubmit;
		if( document.imgSubmit ) form = document.imgSubmit;
		if( form.link ) {
			for( var i=0; i < form.link.length; i++ ) {
				if( form.link[i].value === 'popin' ) {
					linkTypeCheckbox = form.link[i];
					break;
				}
			}
		}
		if( linkTypeCheckbox !== null && linkTypeCheckbox.checked == true && form.popin_link.value == ''){
			alert('<?php echo ty_("Fehler: Sie haben keine Seite ausgewählt.")?>');
			return false;
		}
		<?php
		return ob_get_clean();
	}
 
	/**
	 * returns the value for the href attribute
	 *
	 * @param array $request values sent by form
	 * @return string
	 */
	public function getHref( &$request ) {
		return $GLOBALS['mytyBasePath'].'/rewrite.php?topic='.$request['popin_link'].'#popin-container';
	}
 
	/**
	 * returns the name of a previously declared javascript function to modify the properties of the anchor node
	 * this function must be callable in global context
	 *
	 * @return string javascript function
	 */
	public function getLinkBuildCall() {
		return 'buildAnchorNode';
	}
 
	/**
	 * output the code
	 *
	 * @return string
	 */
	public function __toString() {
		return $this->widget->getWidget();
	}
}

Veröffentlichungs-Modus (publishMode)

Der Veröffentlichungsmodus ist eine Anzeigeform von Inhaltsseiten, in der man visualisiert bekommt, welche Inhalte der Seite noch unveröffentlicht sind. Darin kann man sofort die betreffenden Inhalte veröffentlichen, bearbeiten oder an den jeweiligen Redaktuer zur Überarbeitung zurückgeben. Alle bereits veröffentlichten Inhalte werden hierbei inaktiv dargestellt und sind nicht bearbeitbar.

Benutzung

Um in den publishMode zu wechseln benutzt man die Modus-Auswahl in der Werkzeugleiste. Möchte man den Veröffentlichungsmodus verlassen wechselt man einfach wieder zurück in den Vorschau- bzw. Editiermodus.

Reguläre Ausdrücke

Ab der myty-Version 3.5 ist es möglich reguläre Ausdrücke für bearbeitbare Textfelder festzulegen.

Syntax

<ty:content id=„id“ regexp_type=„phone“>Telefonnummer</ty:content>

Im oberen Beispiel wird ein Content-Feld erzeugt mit der Bedingung, dass der Inhalt eine Telefonnummer ist. Dabei muss der Typ „phone“ im Backend in Einstellungen→Projektverwaltung→Typ-Richtlinien angelegt sein.

optionale Content-Tags

Durch die Möglichkeit reguläre Ausdrücke für Content-Felder anzulegen gibt es ab Version 3.5 noch weitere Tags für das Modul „Content“.

noError: Wenn auf dieser Seite alle Content-Felder in Ordnung sind.

errorText: Fehlertext, der in Typ-Richtlinien angegeben ist.

Beispiel

Fehlerausgabe und „Speichern“-Button nicht anzeigen für obiges Beispiel

<ty:content>
    <ty-content:errorText id="id"/>
    <ty-content:noError><button type="submit">Speichern</button></ty-content:noError>
</ty:content>
 
content.txt · Zuletzt geändert: 2011/03/25 13:42 von ricardo.schmidt
 
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki