Modul :: Externer Content

Gesperrt
kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Modul :: Externer Content

Beitrag von kummer » Mi 11. Jul 2007, 17:29

hi all

ich habe wieder mal ein kleines modülchen. und zwar handelt es sich um eine erweiterung des normalen cms_html-moduls. eingesetzt wird das modul einfach anstelle des normalen html-moduls. wenn man einen externen inhalt (also von einem anderen artikel) einbinden möchte, braucht man lediglich foreignContent zu schreiben, das wort zu selektieren und einen link zu erstellen auf die seite, von der der inhalt verwendet werden soll. der cms_html-inhalt des entsprechenden artikels wird dann anstelle des wortes foreignContent ausgegeben.

für dieses modul benötigt man folgenden code. dieser ist in einer datei beliebigen namens im verzeichnis 'contenido/classes' abzulegen.

Code: Alles auswählen

<?php
class foreignContentExtended {

	function foreignContentExtended($content, & $db) {

		global $lang;

		if (!is_object($db)) {
			$this->db = new DB_Contenido();
		} else {
			$this->db = $db;
		}

		$this->content = $content;
		$this->lang = $lang;

	}

	function getHTML($index, $idart) {

		global $cfg;

		$this->db->query("" .
		"SELECT c.value FROM {$cfg['tab']['art_lang']} AS b " .
		"LEFT JOIN {$cfg['tab']['content']} AS c ON b.idartlang = c.idartlang " .
		"LEFT JOIN {$cfg['tab']['type']} AS d ON c.idtype = d.idtype " .
		"WHERE " .
		"	b.idart = {$idart} " .
		"	AND b.idlang = {$this->lang} " .
		"	AND d.type = 'CMS_HTML' " .
		"	AND c.typeid = $index " .
		"");

		if ($this->db->next_record()) {
			return urldecode($this->db->f('value'));
		}

		return '';
	}

	function getOutput() {

		$pattern = "|<a[\w\s]*href\s*=\s*\"[^\"]*idart=([0-9]*)[^>]*>\s*foreignContent\s*([0-9]*)\s*</a>|i";
		preg_match_all($pattern, $this->content, $match, PREG_PATTERN_ORDER);
		
		for ($i = 0; $i < count($match[0]); $i++) {
			
			$idart = (int) $match[1][$i];
			$index = (int) $match[2][$i];
			
			if ($match[2][$i] == '') {
				$index = 1;
			}
			
			if ($idart > 0 && $index > 0) {
				$this->content = str_replace($match[0][$i], $this->getHTML($index, $idart), $this->content);
			}
		}
		
		return $this->content;
	}
}
?>
das modul selber sieht dann wie folgt aus:

Code: Alles auswählen

<?php

cInclude('classes', 'foreignContentExtended.class.inc.php');

$fContent = new foreignContentExtended("CMS_HTML[1]", $db);

if ($contenido && ($view == "edit")) {
	echo "<div class=\"content\">"."CMS_HTML[1]"."</div>";
} else {
	echo "<div class=\"content\">". $fContent->getOutput() ."</div>";
}

?>
foreignContentExtended.class.inc.php ist dabei natürlich durch den dateinamen zu ersetzen, der bei der speicherung der modul-klasse verwendet worden ist.

man kann dieses modul genau so verwenden wie das normale html-modul. der performance-nachteil ist marginal und sollte unter normalbedingungen keine rolle spielen.

mfg,
anreas
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)

Gesperrt