Erweiterung des Fleißtextmoduls?

Gesperrt
kasi
Beiträge: 14
Registriert: Fr 14. Nov 2003, 15:39
Kontaktdaten:

Erweiterung des Fleißtextmoduls?

Beitrag von kasi »

Guten abend allerseits!

Ich habe mir beim Einsatz des folgenden Fließtextmoduls einige Gedanken um eventuelle Erweiterungen gemacht:
Erstmal das Modul an sich:

Eingabe:

Code: Alles auswählen

echo "<table align=\"left\" cellpadding=\"0\" cellspacing=\"0\">
<tr valign=\"top\">
  <td width=\"202\">Modul anzeigen?</td>
  <td><select name=\"CMS_VAR[3]\" size=\"1\">";
if ("CMS_VALUE[3]" == "") {
	echo "<option selected>Ja</option>";
	echo "<option>Nein</option>";
}
if ("CMS_VALUE[3]" != "") {
	echo "<option selected>CMS_VALUE[3]</option>";
	echo "<option>Ja</option>";
	echo "<option>Nein</option>";
}
echo"
</tr><tr valign=\"top\">
  <td width=\"202\">Bildposition</td>
  <td><select name=\"CMS_VAR[4]\" size=\"1\">";
if ("CMS_VALUE[4]" == "") {
	echo "<option selected>Links</option>";
	echo "<option>Rechts</option>";
}
if ("CMS_VALUE[4]" != "") {
	echo "<option selected>CMS_VALUE[4]</option>";
	echo "<option>Links</option>";
	echo "<option>Rechts</option>";
}
//Skalierung
echo"
</tr><tr valign=\"top\">
  <td width=\"202\">Skalierung (% der zul&auml;ssigen Breite von 200)</td>
  <td><select name=\"CMS_VAR[5]\" size=\"1\">";

if ("CMS_VALUE[5]" == "") {
	echo "<option selected>keine Skalierung</option>";
}
if ("CMS_VALUE[5]" != ""){
if("$CMS_VALUE[5]" =="keine Skalierung")
		   echo "<option selected>keine Skalierung</option>";
  	                        echo "<option selected>CMS_VALUE[5]</option>";
}
        echo "<option>keine Skalierung</option>";
for ($i=10; $i<=100;$i+=10){
     echo "<option";
if ("$CMS_VALUE[5]" ==$i)echo "selected";
echo ">".$i." %</option>";
} 
echo"</select></td>"; //ende skalierung
echo"
</tr><tr valign=\"top\">
<td width=\"202\">".$mod["font"]." Fliesstext:</td>
<td><select name=\"CMS_VAR[0]\" size=\"1\">";
if ("CMS_VALUE[0]" == 0) {
	echo "<option value=\"3\" selected>Font 3: Flie&#65533;ext</option>";
}
for ($i=1; $i<7; $i++) {
	if ($i != "CMS_VALUE[0]") {
         	echo "<option value=\"$i\">Font $i</option>";
         } else {
         	echo "<option value=\"$i\" selected>Font $i</option>";
         }
}
echo "</SELECT></td>
</tr><tr valign=\"top\">
<td width=\"202\">".$mod["font"]." Beschreibung:</td>
<td><select name=\"CMS_VAR[1]\" size=\"1\">";
if ("CMS_VALUE[1]" == 0) {
echo "<option value=\"4\">Font 4: Text klein</option>";
}
for ($i=1; $i<7; $i++) {
if ($i != "CMS_VALUE[1]") {
echo "<option value=\"$i\">Font $i</option>";
} else {
echo "<option value=\"$i\" selected>Font $i</option>";
}
}
echo "</SELECT></td></tr></table>
<input type=\"hidden\" name=\"CMS_VAR[2]\" value=\"".$value."\">";
Sowie folgende ausgabe:

Code: Alles auswählen

<?php

$image_width_max=200;

$tmp_img1 = "CMS_IMG[1CMS_VALUE[2]]";
$fileid = "CMS_IMG[1CMS_VALUE[2]]";
$tmpImgDescr1 = "CMS_IMGDESCR[1CMS_VALUE[2]]";
if ("CMS_VALUE[3]" != "Nein") { //check ob Modulanzeige Ja / Nein 
if ($tmp_img1){// Begin Bildroessencheck, wenn ein Bild vorhanden

$original_size=GetImageSize($tmp_img1); //holt die Bildgroessen aus dem Originalbild

if ("CMS_VALUE[5]"=="keine Skalierung"){           //begin keine skalierung
if($original_size[0]<=$image_width_max){
$new_size="height=\"".$original_size[1]."\" width=\"".$original_size[0]."\"";
}
if($original_size[0]>$image_width_max){
$new_image_height=(int)($image_width_max*$original_size[1]/$original_size[0]);
$new_size="height=\"".$new_image_height."\" width=\"".$image_width_max."\"";
}
}//end keine Skalierung

if (ereg(" %","CMS_VALUE[5]")){   //begin Skalierung mit Prozent
$skal_proz=split(" ","CMS_VALUE[5]");
$skal_faktor=$skal_proz[0]/100;
$new_image_width=(int)($image_width_max*$skal_faktor);
$new_image_height=(int)($new_image_width*$original_size[1]/$original_size[0]);
$new_size="height=\"".$new_image_height."\" width=\"".$new_image_width."\"";
} //end Skalierung mit Prozent
} // Ende Bildgroesssencheck

if("CMS_VALUE[4]" == "Rechts") { //Ausgabe Bild Rechts
echo "<table width=100% border=0><tr><td align=left>";
if(($tmp_img1)||($tmpImgDescr1!=""))
echo "<div style=\"float:right; text-align:left; margin-left:10px; margin-bottom:10px \">";

if ($tmp_img1) {echo "<A class=\"images\" HREF=\"thumb2.php?url=".$fileid."\" target=\"full\">
<IMG SRC=\"CMS_IMG[1CMS_VALUE[2]]\" ";
 if($new_size!="")echo $new_size;
 if($edit != "true"){echo " title=\"CMS_IMGDESCR[1CMS_VALUE[2]] (Klicken f&uuml;r Vollansicht)\" 
alt=\"CMS_IMGDESCR[1CMS_VALUE[2]]\"></a>";}
 else {echo ">";};
};
if ($tmpImgDescr1 !="") {
echo ("<br><center>CMS_IMGDESCR[1CMS_VALUE[2]]</center>");
}
else {
echo "CMS_IMGDESCR[1CMS_VALUE[2]]";
}
if(($tmp_img1)||($tmpImgDescr1!=""))
echo "</div>";
echo "<p>CMS_TEXT[1CMS_VALUE[2]]<br style=clear:all></p>";
echo "</td></tr></table>";
} // Ende Ausgabe Bild Rechts

if("CMS_VALUE[4]" != "Rechts") { //Ausgabe Bild Links
echo "<table width=100% border=0><tr><td align=left>";
if(($tmp_img1)||($tmpImgDescr1!=""))
echo "<div style=\"float:left; text-align:left; margin-right:10px; margin-bottom:10px \">";

if ($tmp_img1) {echo "<A  class=\"images\" HREF=\"thumb2.php?url=".$fileid."\" target=\"full\">
<IMG SRC=\"CMS_IMG[1CMS_VALUE[2]]\" ";
 if($new_size!="")echo $new_size;
 if($edit != "true"){echo " title=\"CMS_IMGDESCR[1CMS_VALUE[2]] (Klicken f&uuml;r Vollansicht)\" 
alt=\"CMS_IMGDESCR[1CMS_VALUE[2]]\"></a>";}
 else {echo ">";};
};
if ($tmpImgDescr1 !="") {
echo ("<br> <center>CMS_IMGDESCR[1CMS_VALUE[2]]</center>");
}
else {
echo "CMS_IMGDESCR[1CMS_VALUE[2]]";
}
if(($tmp_img1)||($tmpImgDescr1!=""))
echo "</div>";
echo "<p>CMS_TEXT[1CMS_VALUE[2]]<br></p>";
echo "</td></tr></table>";
} // Ende Ausgabe Bild Links

} // Ende if Modulanzeige ja/nein
?>
Ich habe das Modul schon etwas erweitert, und zwar habe ich eine sperate Datei erstellt, die dann das jeweilige Bild in einer vollansicht Zeigt.

Dennoch stelle ich mir noch folgende Fragen zur erweiterung:

1. Ist es möglich mehrere Bilder und damit natürlich auch Texte in einem Fließtextmodul unterzubringen, ich habe mir das etwa so vorgestellt: Das erste Bild steht links, das zweite recht, das dritte wieder links, usw.
Die Alternative mit mehreren Fließtextmodulen in einem Template funktioniert nicht.

2. Das jeweilige Bild wird ja nicht wirklich verkleinert, demnach müsste ich noch eine Thumbnail-Funktionalität integrieren.

Ein paar Anregungen wären hilfreich.
Danke schon im Voraus...

Kasi[/code]
McDeeJay
Beiträge: 121
Registriert: Mo 3. Nov 2003, 18:00
Wohnort: Wildeshausen
Kontaktdaten:

Das würde mich auch interessieren.

Beitrag von McDeeJay »

So etwas suche ich auch, hab das bislang stinknormal mit HTM-Tabellen gemacht. Wäre für Contenido aber was feines.
Gruß

msi

Contenido: 4.8.12
PickPay
Beiträge: 164
Registriert: Di 2. Dez 2003, 19:38
Wohnort: Zürich
Kontaktdaten:

Beitrag von PickPay »

Ich habe mal das Fliesstextmodul so erweitert, dass im Frontend alle Bilder aus dem Text gesucht werden, ink Grössenangaben. Da es sich ja dabei nicht um echte Thumbnails handelt, erstelle ich aus jedem der Bilder im Text eines und ersetze die Bilder im Text mit dem echten Preview inkl. einem Link zum drauf klicken, wonach das ehemalige, grosse Bild erscheint.

Code: Alles auswählen

 $str="CMS_HTML[1]";
 
 if (trim($str)) {
  // Im Nicht-Editiermodus wird ein Auto-Image-Resizeing durchgeführt
  if (!$edit) {
   // Alle Imagetags werden gelesen
   preg_match_all('/<img(?:.*?)>/si',$str,$irp_array);
   $i=0;
   $irp=array();
   // Für alle gefundenen Imagetags werden die Attribute Grösse, sowie Datenquelle gelesen.
   foreach ($irp_array[0] as $v) {
    // Alle Attribute suchen
    preg_match('/src(?:\s*?)=(?:\s*?)(?:"|\')?([^"^\']*)(?:"|\')?/si',$v,$irp_src);
    preg_match('/style(?:\s*?)=(?:\s*?)(?:"|\')?([^"^\']*)(?:"|\')?/si',$v,$irp_style);
    preg_match('/align(?:\s*?)=(?:\s*?)(?:"|\')?([^"^\'^\s]*)(?:"|\')?/si',$v,$irp_align);
    preg_match('/width(?:\s*?)=(?:\s*?)(?:"|\')?([0-9]*)(?:"|\')?/si',$v,$irp_width);
    preg_match('/height(?:\s*?)=(?:\s*?)(?:"|\')?([0-9]*)(?:"|\')?/si',$v,$irp_height);
    // Die gefundenen Attribute speichern, derzeit noch für keine Anwendung
    $irp[$i]['src']=$irp_src[1];
    $irp[$i]['align']=$irp_align[1];
    $irp[$i]['width']=(int)$irp_width[1];
    $irp[$i]['height']=(int)$irp_height[1];
    // * Style-Extrahierung  *
     preg_match('/width(?:\s*?):(?:\s*?)([0-9]*)(?:\s*?)px(?:\s*?);?/si',$irp_style[1],$irp_stylew);
     preg_match('/height(?:\s*?):(?:\s*?)([0-9]*)(?:\s*?)px(?:\s*?);?/si',$irp_style[1],$irp_styleh);
     $irp_stylew[1]=(int)trim($irp_stylew[1]); 
     $irp_styleh[1]=(int)trim($irp_styleh[1]);
     if ($irp_stylew[1])
      $irp_width[1]=$irp_stylew[1];
     if ($irp_styleh[1])
      $irp_height[1]=$irp_styleh[1];
    // * * * * * * * * * * * * 
    // Den neuen Dateiname generieren
    $new_name='images/autogen/auto_preview_'.md5($irp_src[1].$irp_width[1].$irp_height[1]).'.jpg';
    // Nur wenn bestimmte Grössenangaben gemacht wurden wird das Bild verkleinert
    //if ($irp_src[1] && $irp_width[1]>10 && $irp_height[1]>10) {
    if ($irp_src[1]) {
     $pattern='/<img(?:[^<^>]+?)src(?:\s*?)=(?:\s*?)(?:"|\')?'.
'(?:'.str_replace('/','\/',quotemeta($irp_src[1])).')'.
'(?:"|\')?(?:[^<^>]*?)>/si';
     $str=preg_replace($pattern,"\n\n\n".'<A HREF="'.$irp_src[1].'" TARGET="_blank"><IMG SRC="'.$new_name.'" ALIGN="'.$irp_align[1].'" BORDER="0"></A>'."\n\n\n",$str);
     // Falls das Bild bereits einmal verkleinert wurde, wird es nicht nochmals generiert
     if (!file_exists($new_name)) {
      $imb = new ImageBull($irp_src[1]);
      $imb->resize($irp_width[1].'x'.$irp_height[1]);
      $imb->out($new_name,'jpg');
      $imb->close();
     }
    }
    $i++;
   }
  }
  echo $str;
 }
Allerdings muss man dann noch meine ImageKlasse einbinden:

Code: Alles auswählen

<?PHP

 // Klasse zur Bildmanipulation
 class ImageBull {

  // Typ des geladenen Bildes
  var $type = 0;
  // Bildresource
  var $img = 0;
  // Temporäre Bildresource
  var $tmg = 0;
  // Aktuelle Farbdefinition
  var $cl=array();

  // Lädt das Bild
  function ImageBull($src) {
   // Prüft, ob die Datei existiert
   if (file_exists($src)) {
    // Versucht die Datei als PNG zu laden
    if ($this->img=@ImageCreateFromPNG($src)) {
     $this->type='png';
     // Kopiert das Standardbild in die Tempresource
     $sx=imagesx($this->img);
     $sy=imagesy($this->img);
     $this->tmg=ImageCreateTrueColor($sx,$sy);
     ImageCopy($this->tmg,$this->img,0,0,0,0,$sx,$sy);
    }
    // Versucht die Daten als JPEG zu laden
    elseif ($this->img=@ImageCreateFromJPEG($src)) {
     $this->type='jpeg';
     // Kopiert das Standardbild in die Tempresource
     $sx=imagesx($this->img);
     $sy=imagesy($this->img);
     $this->tmg=ImageCreateTrueColor($sx,$sy);
     ImageCopy($this->tmg,$this->img,0,0,0,0,$sx,$sy);
    }
    // Versucht die Datei als GIF zu laden
    elseif ($this->img=@ImageCreateFromGIF($src)) {
     $this->type='gif';
     // Kopiert das Standardbild in die Tempresource
     $sx=imagesx($this->img);
     $sy=imagesy($this->img);
     $this->tmg=ImageCreateTrueColor($sx,$sy);
     ImageCopy($this->tmg,$this->img,0,0,0,0,$sx,$sy);
    } // ENDIF
   } // ENDIF
  } // ENDFUNCTION

  // Gibt die tempröre Bildresource in eine Datei aus
  function out($src,$out=0,$quality=95) {
   if (!$out)
    $out=$this->type;
   $out=strtoupper(trim($out));
   // Gibt ein PNG aus
   if ($out=='PNG')
    return @ImagePNG($this->tmg,$src);
   // Gibt ein JPEG aus
   if ($out=='JPEG' || $out=='JPG')
    return @ImageJPEG($this->tmg,$src,$quality);
   // Git ein GIF aus
   if ($out=='GIF')
    return @ImageGIF($this->tmg,$src);
  }

  // Speichert eine Farbe
  function Color($cs) {
   $this->cl['r']=hexdec(substr($cs,1,2));
   $this->cl['g']=hexdec(substr($cs,3,2));
   $this->cl['b']=hexdec(substr($cs,5,2));
  }

  function Copyright($str,$color='#888888',$pos=1,$font=7) {
   $this->Color($color);
   $cl=ImageColorAllocate($this->tmg,$this->cl['r'],$this->cl['g'],$this->cl['b']);
   if ($pos==1) {
    ImageString($this->tmg,$font,5,2,$str,$cl);
   }
   if ($pos==2) {
    ImageString($this->tmg,$font,5,imagesy($this->tmg)-20,$str,$cl);
   }
  }

  // Verkleinert ein Bild proportional
  function Resize($maxsize) {
   if (!$this->type)
    return 0;
   // Extrahier die maximale Grösse
   list($nx,$ny)=explode('x',$maxsize);
   // Maximalgrössen
   $nx=(int) trim($nx);
   $ny=(int) trim($ny);
   // Aktuelle Grössen
   $sx=imagesx($this->img);
   $sy=imagesy($this->img);
   // Das Bild wird nur modifiziert, wenn
   // es grösser ist.
   if ($sx>$nx || $sy>$ny) {
    $ds=$sx/$sy;
    $dn=$nx/$ny;
    // Die neue Grösse des Bildes
    if ($dn>=$ds)
     $n=array(ceil($ny*$ds),$ny);
    else
     $n=array($nx,ceil($nx/$ds));
    //var_dump(array($nx,$ny),array($sx,$sy),array($dn,$ds),$n);
    // Entfernt das alte Bild aus dem Speicher
    ImageDestroy($this->tmg);
    // Erstellt das neue Bild
    $this->tmg=ImageCreateTrueColor($n[0],$n[1]);
    // Verkleinert und kopiert das Bild
    ImageCopyResampled($this->tmg,$this->img,0,0,0,0,$n[0],$n[1],$sx,$sy);
   }
  }

  // Schliesst das geladene Bild
  function Close() {
   @ImageDestroy($this->img);
   @ImageDestroy($this->tmg);
   $this->type=0;
   $this->img=0;
  }

 }

?>
Zuletzt geändert von PickPay am Di 27. Jan 2004, 13:31, insgesamt 2-mal geändert.
PickPay
Beiträge: 164
Registriert: Di 2. Dez 2003, 19:38
Wohnort: Zürich
Kontaktdaten:

Re: Das würde mich auch interessieren.

Beitrag von PickPay »

McDeeJay hat geschrieben:So etwas suche ich auch, hab das bislang stinknormal mit HTM-Tabellen gemacht. Wäre für Contenido aber was feines.
Hm, dazu braucht man eigentlich keine Tabellen, es genügt, wenn man das Bild um das Attribut ALIGN erweitert. In SPAW über die Bildeinstellungen möglich. Wenn du etwas mehr Abstand zum Text möchtest, ist das über den selben Dialog möglich.
Stelli

Wo genau baust Du Deine Erweiterung ein?

Beitrag von Stelli »

Hi,
dumme Frage, aber wo baust Du Deine Erweiterung des Moduls und die Klasse ein - doch nicht in den Quelltext von kasi, oder doch?
Mit seinem Modul habe ich übrigens das Problem, dass das Pop-Up das Bild nicht findet.

Danke im Vorraus,

Stelli
kasi
Beiträge: 14
Registriert: Fr 14. Nov 2003, 15:39
Kontaktdaten:

Beitrag von kasi »

Das Pop-Up ist bei mir etwas anders gelöst, es befindet sich in einer separaten Datei namens thumb2.php. Deshalb wird das nicht gefunden.
Gesperrt