Das Module von Kummer findet man hier
http://www.contenido-wiki.org/wiki/inde ... ResizeHTML
da modul von steese
http://forum.contenido.org/viewtopic.ph ... tenwechsel
Kummers-Modul: Ein Bild welches man mit dem tiny einpfelgt kann man verkleinern lassen (Größe und Dateigröße) und im PopUp oder als Lightbox das Orifginalbild aufrufen.
Steeses Modul: Mit Hilfe von Ankern kann ein sehr langer Text automatsich unterteielt werden. Eine Navigation am Ende des Artikels macht es möglich sich durch den langen Artikel, der dann aus mehreren Seiten bestehen kann , sich einfach durchzuklicken.
Ziel ist es beide Sachen zu kombinieren.
Problematish (für mich) beiden haben einen Output-Code und beide haben 2 Klassen die man unter Mandant/includes ablegen muss.
Der Output für das Image-Resize (in meiner Ausgabe) würde schon so vollkommen reichen:
Code: Alles auswählen
<?php
* @version 1.0.0
* @author Rudi Bieller
* @copyright four for business AG <www.4fb.de>
if (!isset($tpl) || !is_object($tpl)) {
$tpl = new Template();
}
if ($contenido && ($view == "edit")) {
echo "CMS_HTML[1]";
} else {
$mask[0] = '<img src="{src}" width="{width}" height="{height}" alt="{alt}" title="{title}" class="{class}" />';
$mask[1] = '<a href="{origSrc}"><img src="{src}" width="{width}" height="{height}" alt="{alt}" />{title}</a>>';
cInclude('frontend', 'includes/atelierq.imageResize.class.inc.php');
$atqImageResize = new atqImageResize("CMS_HTML[1]", "CMS_VALUE[1]", "CMS_VALUE[2]", $mask, $db);
echo $atqImageResize->getOutput();
}
?>
Der Output von stees (Veränderte Version von Herrn B)
Code: Alles auswählen
<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname : Article Semi-AutoPageBreak
* Author(s) : Stefan Seifarth <info@polycoder.de>
* Copyright : www.polycoder.de / www.htcm.de
* Created : 2006-06-17
************************************************/
// include pagebreak class
cInclude("frontend", "includes/class.articlepagebreak.php");
$strAnchorName = "CMS_VALUE[210]";
$strArticle = "CMS_HTML[1]";
$strDelimiter = '<a name="' . $strAnchorName . '"></a>';
// initialize class
// parameter delimiter for article spliting
$oArticlePageBreak = new ArticlePageBreak( $strDelimiter );
// set article
$oArticlePageBreak->setArticle( $strArticle );
// set current page for output
$intCurrentPage = 0;
if ( isset($_REQUEST[$oArticlePageBreak->strPageParameter]) && !empty($_REQUEST[$oArticlePageBreak->strPageParameter]) && (int)$_REQUEST[$oArticlePageBreak->strPageParameter] > 0 ) {
$intCurrentPage = (int)$_REQUEST[$oArticlePageBreak->strPageParameter];
}
$oArticlePageBreak->setCurrentPage($intCurrentPage);
// set Textlinks
$oArticlePageBreak->setTextFirstPage( mi18n("Erste Seite") );
$oArticlePageBreak->setTextPreviousPage( mi18n("Vorhergehende Seite") );
$oArticlePageBreak->setTextNextPage( mi18n("Nächste Seite") );
$oArticlePageBreak->setTextLastPage( mi18n("Letzte Seite") );
$oArticlePageBreak->setTextPreviousRange( mi18n("Zurück") );
$oArticlePageBreak->setTextNextRange( mi18n("Weiter") );
$oArticlePageBreak->setTextPageTitle( mi18n("Gehe zu Seite ") );
// output the current article part
if ($edit && empty($_REQUEST['edit'])) { // Edit-Mode
if ( preg_match("/^<([^>]*)>/i", $strDelimiter, $arrTagInlay) ) {
$bolDelimiterIsTag = $arrTagInlay[1];
}
if ( $bolDelimiterIsTag && strlen($bolDelimiterIsTag) > 0 ) {
$strReplacePattern = '';
$arrTagParts = explode(" ", $bolDelimiterIsTag);
if (is_array($arrTagParts)) {
$arrTagParts = array_filter($arrTagParts);
$strReplacePattern = '/<' . implode("[^>]*", $arrTagParts) . '[^>]*>/i';
$strArticle = preg_replace($strReplacePattern,"<div style=\"border:1px dashed #900; color:#a22; text-align:center; padding:0px;\" title=\"An dieser Stelle wird die Seite in blätterbare Folgeseiten getrennt. Siehe Vorschau!\">< -- Seitenumbruch -- ></div>",$strArticle);
}
}
else{
$strArticle = preg_replace($strDelimiter,"<div style=\"border:1px dashed #900; color:#a22; text-align:center; padding:0px;\" title=\"An dieser Stelle wird die Seite in blätterbare Folgeseiten getrennt. Siehe Vorschau!\">< -- Seitenumbruch -- ></div>",$strArticle);
}
echo $strArticle;
}
else{ // Publish-Mode
print $oArticlePageBreak->getArticle();
// get pagination for article
print "<div class=\"articlePagination\">".$oArticlePageBreak->getPagination()."</div>";
}
/*
// xml output
// add custom xml tags
// (class xmlObject is located in class.articlepagebreak.php)
//
$oHeadline = new xmlObject(
"headline", // tag name
"", // attributes (given as array)
"headlinetext", // content of element
true // usage of cdata for content
);
// store the above configured tag into class
$oArticlePageBreak->setXMLAdditionalContentTag($oHeadline);
// output complete xml
print $oArticlePageBreak->getXMLComplete();
*/
?>
Beide Module klappen in einem Template.
Würde man jetzt nur von ImageResize folgende Code in den oberen Output vom Seitenumbruch reinpacken,
Code: Alles auswählen
$mask[0] = '<img src="{src}" width="{width}" height="{height}" alt="{alt}" title="{title}" class="{class}" />';
$mask[1] = '<a href="{origSrc}"><img src="{src}" width="{width}" height="{height}" alt="{alt}" />{title}</a>>';
cInclude('frontend', 'includes/atelierq.imageResize.class.inc.php');
$atqImageResize = new atqImageResize("CMS_HTML[1]", "CMS_VALUE[1]", "CMS_VALUE[2]", $mask, $db);
echo $atqImageResize->getOutput();
werden beide Text-Ausgabe-Felder angezeigt. In einem wird der Artikel gekürzt dargestellt, dafür geht das Vergrößern von Bildern nicht, bei anderem Text-Ausgabe-Feld klappt das Vergrößern aber dafür wird der Artikel nicht umgebrochen.
Hier ist die KLasse vom ImageResize:
Code: Alles auswählen
<?php
/**
* @abstract ImageResizeHTML (atqImageResize)
* @version 1.1.2
* @since 1.1.2 - 05.10.2007
* @since 1.1.1 - 05.10.2007
* @since 1.1.0 - 03.10.2007
* @author Andreas Kummer, atelierQ Kummer
* @copyright Copyright © 2007, atelierQ Kummer
*/
class atqImageResize {
var $htmlContent;
function atqImageResize($content, $maxWidth, $maxHeight, $mask, & $db) {
$this->thumbDir = "thumbs";
$this->db = $db;
if (!is_array($mask)) {
$this->mask[0] = $mask;
$this->mask[1] = $mask;
} else {
$this->mask = $mask;
}
$this->maxWidth = (empty ($maxWidth)) ? (9999) : ((int) $maxWidth);
$this->maxHeight = (empty ($maxHeight)) ? (9999) : ((int) $maxHeight);
preg_match_all('(<img.*?>)', $content, $match);
for ($i = 0; $i < count($match[0]); $i++) {
$newPath = $this->resize($match[0][$i]);
if ($newPath != $match[0][$i]) {
/*
* Das Bild wurde skaliert...
*/
$content = str_replace($match[0][$i], $newPath, $content);
}
}
$this->htmlContent = $content;
}
function getOutput() {
return $this->htmlContent;
}
function resize($imageTag) {
global $cfgClient, $client;
preg_match_all('(([a-zA-Z]*)="(.*?)")', $imageTag, $match);
foreach ($match[1] as $key => $value) {
$position[$value] = $key;
}
if (!isset ($position['src']) || empty ($match[2][$position['src']])) {
/*
* Abbruch, weil keine Bildquelle bezeichnet ist.
*/
return $imageTag;
}
$width = min($this->maxWidth, (isset ($position['width'])) ? ($match[2][$position['width']]) : (99999));
$height = min($this->maxHeight, (isset ($position['height'])) ? ($match[2][$position['height']]) : (99999));
$imageSourceHtml = $cfgClient[$client]['path']['htmlpath'] . $match[2][$position['src']];
if (substr($match[2][$position['src']], 0, 4) != 'http') {
$imageSource = $cfgClient[$client]['path']['frontend'] . $match[2][$position['src']];
} else {
$imageSource = $cfgClient[$client]['path']['frontend'] . str_replace($cfgClient[$client]['path']['htmlpath'], '', $match[2][$position['src']]);
}
$targetName = str_replace('/', '_', $match[2][$position['src']]) . '.' . $width . 'x' . $height . '.jpg';
if (!file_exists($imageSource)) {
/*
* Wenn die Originaldatei nicht vorhanden ist, ist abzubrechen.
*/
return $imageTag;
}
$imageSourceDimensions = getimagesize($imageSource);
$origImageSourceDimensions = $imageSourceDimensions;
if (file_exists($cfgClient[$client]['upl']['path'] . $this->thumbDir . '/' . $targetName)) {
/*
* Skaliertes Bild liegt bereits vor und wird zurückgegeben.
*/
$imageSourceDimensions = getimagesize($cfgClient[$client]['upl']['path'] . $this->thumbDir . '/' . $targetName);
if (isset ($position['width'])) {
$match[0][$position['width']] = 'width="' . $imageSourceDimensions[0] . '"';
}
if (isset ($position['height'])) {
$match[0][$position['height']] = 'height="' . $imageSourceDimensions[1] . '"';
}
$match[0][$position['src']] = 'src="' . $cfgClient[$client]['upl']['htmlpath'] . $this->thumbDir . '/' . $targetName . '"';
$parts['src'] = $cfgClient[$client]['upl']['htmlpath'] . $this->thumbDir . '/' . $targetName;
$parts['height'] = $imageSourceDimensions[1];
$parts['width'] = $imageSourceDimensions[0];
$parts['origHeight'] = $origImageSourceDimensions[1];
$parts['origWidth'] = $origImageSourceDimensions[0];
$parts['title'] = (isset ($position['title'])) ? ($match[2][$position['title']]) : ('');
$parts['titleUrl'] = urlencode($parts['title']);
$parts['alt'] = (isset ($position['alt'])) ? ($match[2][$position['alt']]) : ('');
return $this->getFilledMask($parts, $imageSourceHtml, $this->mask[1], $match);
}
if ($imageSourceDimensions[0] <= $width && $imageSourceDimensions[1] <= $height) {
/*
* Das Bild muss nicht skaliert werden.
*/
$parts['src'] = $match[2][$position['src']];
$parts['height'] = $imageSourceDimensions[1];
$parts['width'] = $imageSourceDimensions[0];
$parts['origHeight'] = $imageSourceDimensions[1];
$parts['origWidth'] = $imageSourceDimensions[0];
$parts['title'] = (isset ($position['title'])) ? ($match[2][$position['title']]) : ('');
$parts['titleUrl'] = urlencode($parts['title']);
$parts['alt'] = (isset ($position['alt'])) ? ($match[2][$position['alt']]) : ('');
return $this->getFilledMask($parts, $imageSourceHtml, $this->mask[0], $match);
}
/*
* Zielgrösse des Bildes ermitteln.
*/
$slopeSource = $imageSourceDimensions[1] / $imageSourceDimensions[0];
$slopeTarget = $height / $width;
if ($slopeSource < $slopeTarget) {
/*
* Auf Breite skalieren
*/
$targetWidth = (int) $width;
$targetHeight = (int) round(($targetWidth / $imageSourceDimensions[0]) * $imageSourceDimensions[1]);
} else {
/*
* Auf Höhe skalieren
*/
$targetHeight = (int) $height;
$targetWidth = (int) round(($targetHeight / $imageSourceDimensions[1]) * $imageSourceDimensions[0]);
}
$sourcePath = $dst_im = imagecreatetruecolor($targetWidth, $targetHeight);
$weiss = ImageColorAllocate($dst_im, 255, 255, 255);
imagefill($dst_im, 0, 0, $weiss);
if ($imageSourceDimensions[2] == 1) {
$src_im = imagecreatefromGIF($imageSource);
}
elseif ($imageSourceDimensions[2] == 2) {
$src_im = ImageCreateFromJPEG($imageSource);
}
elseif ($imageSourceDimensions[2] == 3) {
$src_im = ImageCreateFromPNG($imageSource);
} else {
$src_im = imagecreatefromgd($imageSource);
}
imagecopyresampled($dst_im, $src_im, 0, 0, 0, 0, $targetWidth, $targetHeight, $imageSourceDimensions[0], $imageSourceDimensions[1]);
imagejpeg($dst_im, $cfgClient[$client]['upl']['path'] . $this->thumbDir . '/' . $targetName, 100);
if (isset ($position['width'])) {
$match[0][$position['width']] = 'width="' . $targetWidth . '"';
}
if (isset ($position['height'])) {
$match[0][$position['height']] = 'height="' . $targetHeight . '"';
}
$match[0][$position['src']] = 'src="' . $cfgClient[$client]['upl']['htmlpath'] . $this->thumbDir . '/' . $targetName . '"';
$parts['src'] = $cfgClient[$client]['upl']['htmlpath'] . $this->thumbDir . '/' . $targetName;
$parts['height'] = $targetHeight;
$parts['width'] = $targetWidth;
$parts['origHeight'] = $imageSourceDimensions[1];
$parts['origWidth'] = $imageSourceDimensions[0];
$parts['title'] = (isset ($position['title'])) ? ($match[2][$position['title']]) : ('');
$parts['titleUrl'] = urlencode($parts['title']);
$parts['alt'] = (isset ($position['alt'])) ? ($match[2][$position['alt']]) : ('');
return $this->getFilledMask($parts, $imageSourceHtml, $this->mask[1], $match);
}
function getFilledMask($parts, $imageSourceHtml, $mask, $match) {
global $cfgClient, $client;
$returnValue = $mask;
/*
* Alle übertragenen Platzhalter ersetzen.
*/
foreach ($parts as $key => $value) {
$returnValue = str_replace('{' . $key . '}', $value, $returnValue);
}
/*
* Description aus der Datenbank auslesen und in der Maske ersetzen.
*/
$this->db->query("" .
"SELECT description " .
"FROM con_upl " .
"WHERE CONCAT('{$cfgClient[$client]['upload']}', dirname, filename) = '{$imageSourceHtml}' " .
"");
if ($this->db->next_record()) {
$returnValue = str_replace('{description}', urldecode($this->db->f('description')), $returnValue);
} else {
$returnValue = str_replace('{description}', '', $returnValue);
}
$returnValue = str_replace('{origSrc}', $imageSourceHtml, $returnValue);
/*
* Alle im Image-Tag allenfalls sonst noch vorhandenen Tags auslesen und - sofern
* in der Maske vorhanden - ersetzen.
*/
for ($i = 0; $i < count($match[1]); $i++) {
$returnValue = str_replace('{' . $match[1][$i] . '}', $match[2][$i], $returnValue);
}
/*
* Allenfalls immer noch vorhandene Platzhalter, die nicht haben ersetzt werden können, sind zu löschen.
*/
$returnValue = preg_replace('/{.*?}/', '', $returnValue);
return $returnValue;
}
}
?>
Fortsetzung siehe nächsten Beitrag