Seite 1 von 1

Navigations Button generieren...

Verfasst: Di 26. Okt 2004, 16:08
von meddy
Hallo Leute, bin gerade dabei ein Script zu schreiben, welches aus contenido Navi Buttons als Grafiken generieren soll.

Code: Alles auswählen

<?PHP

$breite = 129; 
$hoehe = 19; 
$text = "Neuwagen"; 
$bilddatei ="bild.png";

$schriftart="ARIAL.TTF
$schriftgroesse="9";

$image2 = imagecreatefrompng($bilddatei); 
$image = imagecreate ($breite,$hoehe); 
$farbe_body=imagecolorallocate($image,0,0,0);

imagettftext($image2, $schriftgroesse, 0, 15, 13, $image, $schriftart, $text); 
header ("Content-type: image/png"); 

imagepng($image2);
ImageDestroy($image2); 

?>
Funktioniert auch soweit... wenn Euer Provider den GD support unterstützt.
Jetzt habe ich das Programm in meine Service-Navigation implementiert:
Das Output ist hierbei wichtig!!!!!

Code: Alles auswählen

// selected category INPUT
$selected = "CMS_VALUE[0]";

echo "<table cellspacing=\"0\" cellpadding=\"10\" border=\"0\">
        <tr valign=\"top\">
          <td>Kategorie wählen:</td>
          <td>
            <select name=\"CMS_VAR[0]\">";
            if($selected!="0" && $selected!=""){
             echo"<option value=\"0\">--- kein ---</option>";

            }else{
            echo"<option selected=\"selected\" value=\"0\">--- kein ---</option>";
            }

            // fetch all categorys
            $query = "SELECT A.idcat, A.level, C.name FROM ".$cfg["tab"]["cat_tree"]." AS A, ".
                     $cfg["tab"]["cat"]." AS B,  ".$cfg["tab"]["cat_lang"]." AS C WHERE A.idcat=B.idcat ".
                     "AND B.idcat=C.idcat AND C.idlang='$lang' AND B.idclient='$client' ".
                     "AND C.visible=1 ORDER BY A.idtree";
            // execute query
            $db->query($query);

            // loop result and build the options
            while ($db->next_record()) {

              // indent spacer
              $spaces = "|";

              // how many levels
              $levels = $db->f("level");

              for ($i = 0; $i < $levels; $i ++) {
                // add 2 spaces for every level
                $spaces = $spaces . "--";

              } // end for
              
              $spaces .= ">";


              if ($selected == $db->f("idcat")) {
                // selected category
                echo "<option selected=\"selected\" value=\"". $db->f("idcat") ."\">". $spaces . $db->f("name") ."</option>";

              } else {
                // category
                echo "<option value=\"". $db->f("idcat") ."\">". $spaces . $db->f("name") ."</option>";

              } // end if

            } // end while

echo "      </select>";

echo "    </td>
        </tr>
      </table>";

Code: Alles auswählen


<?php

// OUTPUT
include_once($cfg["path"]["contenido"].$cfg["path"]["includes"]."functions.con.php");

$catStart = "CMS_VALUE[0]";

if ($catStart != "") 
{
	$catIds = conDeeperCategoriesArray($catStart);
	if ( is_array($catIds) ) 
	{
		foreach($catIds as $key=>$val) 
		{
	      		// Ersten Eintrag ueberspringen, weil das der Menupunkt selbst ist
	      		// und nicht angezeigt werden soll.
	      		if ($key != 0) 
	      		{
	
			        $sql = "SELECT CAT.idcat AS idcat, name FROM ". $cfg["tab"]["cat"]." AS CAT, ". $cfg["tab"]["cat_lang"]." AS CATLANG 
			               WHERE CAT.idcat = ".$val."
			               AND CAT.idcat = CATLANG.idcat
			               AND CATLANG.idlang = '$lang'
			               AND CATLANG.visible = '1'";
	
	        		$db->query($sql);
	
	        		while ( $db->next_record() ) 
	        		{
					$id_art = mysql_query("SELECT idart FROM ".$cfg["tab"]["cat_art"]." WHERE idcat='".$db->f("idcat")."' AND is_start='1'");
					$row_art = mysql_fetch_array($id_art);
					$idart = $row_art["idart"];
					
					$external = mysql_query("SELECT external_redirect FROM ".$cfg["tab"]["art_lang"]." WHERE idart = '$idart'");
					$row_external = mysql_fetch_array($external);
					$external_redirect = $row_external["external_redirect"];
					
					if ($external_redirect==0)
					{
						$target="target=_self";
					}
					elseif ($external_redirect==1)
					{
						$target="target=_blank";
					}
					
								
					$test=$db->f("name");
					
					$breite = 129; 
					$hoehe = 19; 
					$text = $test;
					echo $text;
					$bilddatei ="http://weinheim.site-master.de/script/cms/bild.png";
					
					$schriftart="/www/htdocs/weinheim/script/cms/VAGRNDLT.TTF";
					$schriftgroesse="9";
					
					$image2 = imagecreatefrompng($bilddatei); 
					$image = imagecreate ($breite,$hoehe); 
					$farbe_body=imagecolorallocate($image,0,0,0);
					
					imagettftext($image2, $schriftgroesse, 0, 15, 13, $image, $schriftart, $text); 
					header ("Content-type: image/png"); 
					
					//imagepng($image2);
					//ImageDestroy($image2); 
		
							
				        echo '<div class="navhltxt"><br><img src="images/nav_punkt.gif" width="7" height="19" align="absmiddle" hspace="5" vspace="1"><a href="front_content.php?idcat='.$db->f("idcat").'&idart='.$idart.'"'.$target.'>"'.imagepng($image2).'</a></div>';
	        		} // end while
      			} // if
		}  // end foreach
	} // end if (is_array)
}
echo '<div class="navtxt"><img src="images/2x2_grau.gif" width="133" height="1" vspace="15"></div>';
?>


Das Egebnis im frontend läßt aber noch zu wünchen übrig.
es kommen nur

"Line‰PNG IHDR

Verfasst: Mi 27. Okt 2004, 10:27
von emergence
du kannst es nicht im output mit einbinden...

der code muss in einer externen datei enthalten sein...
an diese übergibst du in einem einsprechenden aufruf die parameter.

sagen wir mal dein code liegt in der datei img.php

wäre der aufruf in etwa

<img src="img.php?font=VAGRNDLT.TTF&text=imgtext">

vielleicht hilft dir diese info...

Verfasst: Mi 27. Okt 2004, 10:30
von meddy
danke für den Tip. Versuchs gleich mal... Falls ich geschafft habe poste ich die Scripts durch vielen Dank für die Hilfe!!!

das hat funktioniert...

Verfasst: Mi 27. Okt 2004, 10:58
von meddy
Hey emergence, hat wunderbar geklappt, das mit der Übergabe.

Eine Keinigkeit paßt aber noch nicht. Die Buttons, die generiert werden, schauen nicht Einheitlich aus.

Falls du Zeit hast schau mal unter: http://weinheim.site-master.de/

Verfasst: Mi 27. Okt 2004, 11:21
von meddy
hat sich erledigt... der "png" modus macht ein wenig schwierigkeiten. Jetzt habe ich halt in "jepg" umgewandelt. Ist zwar arg komprimiert, funzt aber jetzt mit schriftfarbe und stärke...

Verfasst: Mi 27. Okt 2004, 16:34
von emergence
schöne seite... ;-)

Verfasst: Mi 27. Okt 2004, 20:27
von OAA
Hi,

kannst Du den fertigen Code bitte mal hier posten, oder uns alles in einem ZIP-File reinlegen?

VLG
OA

Verfasst: Do 28. Okt 2004, 08:16
von meddy
Na aber klar doch... hier der Code...

INPUT Service NAVIGATION

Code: Alles auswählen

// selected category
$selected = "CMS_VALUE[0]";

echo "<table cellspacing=\"0\" cellpadding=\"10\" border=\"0\">
        <tr valign=\"top\">
          <td>Kategorie wählen:</td>
          <td>
            <select name=\"CMS_VAR[0]\">";
            if($selected!="0" && $selected!=""){
             echo"<option value=\"0\">--- kein ---</option>";

            }else{
            echo"<option selected=\"selected\" value=\"0\">--- kein ---</option>";
            }

            // fetch all categorys
            $query = "SELECT A.idcat, A.level, C.name FROM ".$cfg["tab"]["cat_tree"]." AS A, ".
                     $cfg["tab"]["cat"]." AS B,  ".$cfg["tab"]["cat_lang"]." AS C WHERE A.idcat=B.idcat ".
                     "AND B.idcat=C.idcat AND C.idlang='$lang' AND B.idclient='$client' ".
                     "AND C.visible=1 ORDER BY A.idtree";
            // execute query
            $db->query($query);

            // loop result and build the options
            while ($db->next_record()) {

              // indent spacer
              $spaces = "|";

              // how many levels
              $levels = $db->f("level");

              for ($i = 0; $i < $levels; $i ++) {
                // add 2 spaces for every level
                $spaces = $spaces . "--";

              } // end for
              
              $spaces .= ">";


              if ($selected == $db->f("idcat")) {
                // selected category
                echo "<option selected=\"selected\" value=\"". $db->f("idcat") ."\">". $spaces . $db->f("name") ."</option>";

              } else {
                // category
                echo "<option value=\"". $db->f("idcat") ."\">". $spaces . $db->f("name") ."</option>";

              } // end if

            } // end while

echo "      </select>";

echo "    </td>
        </tr>
      </table>";

OUTPUT Service NAVIGATION

Code: Alles auswählen

<?php

include_once($cfg["path"]["contenido"].$cfg["path"]["includes"]."functions.con.php");

$catStart = "CMS_VALUE[0]";

if ($catStart != "") 
{
	$catIds = conDeeperCategoriesArray($catStart);
	if ( is_array($catIds) ) 
	{

echo"<SCRIPT LANGUAGE=\"JavaScript\" TYPE=\"text/javascript\">
<!--
function change(x,y)
{
	document.images[x].src=eval(x+\"_\"+y+\".src\");
}   
//-->
</SCRIPT>
";
		
		foreach($catIds as $key=>$val) 
		{
	      		// Ersten Eintrag ueberspringen, weil das der Menupunkt selbst ist
	      		// und nicht angezeigt werden soll.
	      		if ($key != 0) 
	      		{
	
			        $sql = "SELECT CAT.idcat AS idcat, name FROM ". $cfg["tab"]["cat"]." AS CAT, ". $cfg["tab"]["cat_lang"]." AS CATLANG 
			               WHERE CAT.idcat = ".$val."
			               AND CAT.idcat = CATLANG.idcat
			               AND CATLANG.idlang = '$lang'
			               AND CATLANG.visible = '1'";
	
	        		$db->query($sql);
	        		
	       		
	        		while ( $db->next_record() ) 
	        		{
					$id_art = mysql_query("SELECT idart FROM ".$cfg["tab"]["cat_art"]." WHERE idcat='".$db->f("idcat")."' AND is_start='1'");
					$row_art = mysql_fetch_array($id_art);
					$idart = $row_art["idart"];
					
					$external = mysql_query("SELECT external_redirect FROM ".$cfg["tab"]["art_lang"]." WHERE idart = '$idart'");
					$row_external = mysql_fetch_array($external);
					$external_redirect = $row_external["external_redirect"];
					
					if ($external_redirect==0)
					{
						$target="target=_self";
					}
					elseif ($external_redirect==1)
					{
						$target="target=_blank";
					}
					
					$test=$db->f("name");
				        $test1=$db->f("name");
				        
				        $testjava=str_replace(" ","_",$test1); 
				        
				        echo '
				        
				        <SCRIPT LANGUAGE=\"JavaScript\" TYPE=\"text/javascript\">
					<!--
					'.$testjava.'_ON=new Image();  '.$testjava.'_ON.src="http://www.hahn-lang.de/vw/images/menu/bild_on.php?text='.$test.'";
					'.$testjava.'_OFF=new Image(); '.$testjava.'_OFF.src="http://www.hahn-lang.de/vw/images/menu/bild.php?text='.$test.'";
					//-->
					</SCRIPT> 
				        
				        
				        <div class="navhltxt"><br><a href="front_content.php?idcat='.$db->f("idcat").'&idart='.$idart.'"'.$target.' onmouseover="change('.$testjava.',\'ON\')" onmouseout="change('.$testjava.',\'OFF\')"><img name="'.$testjava.'" src="bild.php?text='.$test.'" border="0"></a></div>';
				        //echo "<img src=\"bild1.png\" border=\"0\">";
	        		} // end while
      			} // if
		}  // end foreach
	} // end if (is_array)
}
echo '<div class="navtxt"><img src="images/2x2_grau.gif" width="133" height="1" vspace="15"></div>';
?>

Hier der PHP-Code der die Bilder generiert muß z.b. als "bild.php" im Verzeichnis "front_content.php" gespeichert werden. Schrift (*ttf) hochladen net vergessen und die Button Vorlage natürlich auch net Vergessen hochzuladen (z.B bild.png)

Code: Alles auswählen

<?php

if(!empty($HTTP_POST_VARS))
{
	$text=$HTTP_POST_VARS["text"];
}


$breite = 129; 
$hoehe = 19; 


$bilddatei ="http://xxx.de/cms/bild.png";                // ############## bitte an euren Pfad anpassen
$schriftart="/www/htdocs/xxx/cms/ARIAL.TTF";    // ############## bitte an euren Pfad anpassen

$schriftgroesse="9";

$image2 = imagecreatefrompng($bilddatei); 
$image = imagecreate ($breite,$hoehe); 
$font_c = imagecolorallocate($image2,153,153,153);

imagettftext($image2, $schriftgroesse, 0, 15, 13, $font_c, $schriftart, $text); 
header ("Content-type: image/png"); 

imagepng($image2);
//imagepng($image2,"/www/htdocs/xxx/cms/bild.png"); // ############## falls man den Text in die Datei speichern möchte!! 
ImageDestroy($image2);
?>
Habt Ihr ein Lösungsvorschlag, wenn ich z.B. diese generierten Buttons noch mit Java Script (MouseOver- bzw. MouseOut) hervorheben möchte.

Da liegt im Moment mein Problem.

Gibt es eine Möglichkeit mit PHP Buttons komplett erstellen zu lassen, sprich eine Vorlge (bild.png) zu verwenden und dieses anschließend als neue datei (bild_on.png) zu speichern.

Freue mich auf Eure Vorschläge.

Verfasst: Do 28. Okt 2004, 08:38
von swelpot
hi,

ich habe mich zwar noch nicht so eingehend mit der materie befasst, aber auf anhieb würde mir für dein problem folgendes einfallen:
um die serverlast möglichst gering zu halten, würde ich, gerade bei navigationsbuttons, diese nicht jedesmal neu generieren lassen. erstelle doch ein festes verzeichnis und überlege dir eine geeignete benamung (z.b. navi_[cat_name].png). baue dann eine kurze überprüfung am anfang ein, ob das genötigte bild mit diesem catnamen schon vorhanden ist, wenn ja, gib nur den bildnamen zurück (über echo), sonst generiere es, leg es im def. ordner ab und gib ebenfalls den bildnamen zurück.
damit könntest du das script auch in einem javascriptteil zwecks mouseOver und -Out -Events verwenden.
Ansonsten vielen Dank für Dein Script, habe die Idee, das ganze für Emailadressen zu verwenden um sie nicht im klartext auf der seite stehen zu haben.

Danke

Grüße

Stefan

Verfasst: Do 28. Okt 2004, 09:28
von meddy
Hi,

mein problem ist, wie ich einen NEUEN Button durch PHP neu in ein vorhandenes verzeichnis abspeichern kann. Vorhande Dateien zu überspeichern ist kein Problem. z.b. Vorlage ist bild.png --> nach der Generierung bild_die_reifengarantie.png.

Weiß du wie das geht...

Hintergrund ist: Ich möchte schon beim Erstellen der Navigationselemente im Backoffice von Conternido ein plugin schreiben welches aus dem Navigationtext 2 fertige Button in ein Verzeichnis generiert, welches später durch MouseOver bzw. MouseOut animiert wird.

Verfasst: Do 28. Okt 2004, 09:52
von swelpot
geht das nicht auf dem gleichen weg, wie das überschreiben?
laut php-handbuch schon... ?!

Verfasst: Do 28. Okt 2004, 10:18
von meddy
hm, werd mal ein weinig testen. Geb dir nacher wieder bescheid...

Verfasst: Do 10. Feb 2005, 10:32
von mko
Wenn das mit dem Mouseover klappt, bitte den Code posten, denn das ist genau das was ich suche...

Verfasst: Do 10. Feb 2005, 13:32
von Spider IT
meddy hat geschrieben:Habt Ihr ein Lösungsvorschlag, wenn ich z.B. diese generierten Buttons noch mit Java Script (MouseOver- bzw. MouseOut) hervorheben möchte.
Hallo meddy,

schau dir doch mal den Quelltext von www.Spider-IT.de an, die Navigationsbuttons werden über ein Script ähnlich deins generiert.
Zusätzlich wird das JavaScript zum Bilder vorausladen und wechseln generiert.
Ist aber kein CMS.

Gruß
René