Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: box_categories.html php-Code ausführen

    dully007

    • Frisch an Board
    • Beiträge: 53
    box_categories.html php-Code ausführen
    am: 05. Februar 2011, 23:09:21
    Hallo Leute,
    ich möchte gerne die Kategorieüberschriften durch eine php-Funktion ersetzen.
    Leider kann ich in der Datei box_categories.html keinen php-Code ausführen.
    Gibt es andere Optionen, wie ich die #heading_categories# durch den Rückgabewert einer php-Funktion ersetzen kann?

    Ich habe mir zu diesem Zweck schon eine Funktion gebaut, die einen Textstring durch eine Grafik einer bestimmten Schriftart ersetzt.

    Code: PHP  [Auswählen]
    function get_font_graphics($groesse, $schriftart, $text, $schriftfarbe, $grafikname, $typ="png", $hintergrundfarbe="646464", $schriftpfad="/home/www/xxx/", $schriftordner="test/", $tempordner="temp/")
        {
                    if ($typ=="png")
                            header("Content-type: image/png");
                    else
                            header("Content-type: image/gif");

                    $textwerte = imagettfbbox($groesse, 0, $schriftpfad.$schriftordner.$schriftart, $text);
                    $xabstand=$groesse/4;
                    $yabstand=$groesse/3;
                    $textwerte[2] += $xabstand*2;
                    $textwerte[5] = abs($textwerte[5]);
                    $textwerte[5] +=  $yabstand*2;
                    $image = imagecreate($textwerte[2], $textwerte[5]);
                    $farbe_body = imagecolorallocatealpha($image, hexdec(substr($hintergrundfarbe, 0, 2)), hexdec(substr($hintergrundfarbe, 2, 2)), hexdec(substr($hintergrundfarbe, 4, 2)), 127);
                    $farbe_b = imagecolorallocate($image, hexdec(substr($schriftfarbe, 0, 2)), hexdec(substr($schriftfarbe, 2, 2)), hexdec(substr($schriftfarbe, 4, 2)));
                    $textwerte[5] -= $yabstand+2;
                    imagettftext($image, $groesse, 0, $xabstand, $textwerte[5], $farbe_b, $schriftpfad.$schriftordner.$schriftart, $text);
                    if ($typ=="png")
                            imagepng($image, $schriftpfad.$tempordner.$grafikname.'.png');
                    else
                            imagegif($image, $schriftpfad.$tempordner.$grafikname.'.gif');
                    imagedestroy($image);
                    if ($typ=="png")
                            return get_bloginfo('template_url')."/".$tempordner.$grafikname.".png";
                    else
                            return get_bloginfo('template_url')."/".$tempordner.$grafikname.".gif";
        }
    Diese Funktion ist zwar für Wordpress, ist aber bis auf die letzten Zeilen auch für xtc einsetzbar,

    Kann mir da jemand helfen?

    LG Andi



    Linkback: https://www.modified-shop.org/forum/index.php?topic=11093.0

    h-h-h

    • modified Team
    • Beiträge: 4.562
    box_categories.html php-Code ausführen
    Antwort #1 am: 05. Februar 2011, 23:13:07
    Hallo Andi,
    PHP kann im Template mit

    Code: PHP  [Auswählen]
    {php} hier dein code {/php}
    verwendet werden.

    Gruß

    h-h-h

    Matt

    • Experte
    • Beiträge: 4.241
    box_categories.html php-Code ausführen
    Antwort #2 am: 05. Februar 2011, 23:24:25
    Da die Kategorienerstellung sowieso im Templateordner geschieht sollte man das in der entsprechenden Datei im source/-Verzeichnis ändern und nur eine Variable für das Template zu belegen.

    Aber Performance ist vermutlich eh nicht so wichtig wenn man sich den Luxus gönnt, jedes Mal ein neues Bild zu erzeugen.

    dully007

    • Frisch an Board
    • Beiträge: 53
    box_categories.html php-Code ausführen
    Antwort #3 am: 06. Februar 2011, 00:06:36
    Hi Ihr,
    sorry, aber irgendwie blicke ich das gerade nicht.
    Einerseits kann ich zwar mit {php} in dem Smarty-Code php-Code ausführen, aber wie bekomme ich die Variable {#heading_categories#}, bzw. dorthin übergeben, bzw. ausgetauscht?
    Ich müsste ja mit meiner Prozedur den Wert von {#heading_categories#} auslesen, und durch meinen neuen "Code" ersetzen.

    Bei der Lösung mit den Sources ist mir der Zusammenhang noch nicht ganz klar.
    Wie kann ich denn hierbei für einen Austausch einer Variablen im Template sorgen, und wie komme ich an die richtigen Werte?

    Leider gibt es ja keine Entwicklerdoku für xtc. Mir sind da die Zusammenhänge noch nicht so wirklich klar, wann was warum aufgerufen wird. Ich komme halt aus der WP-Ecke...

    Es wäre lieb, wenn Ihr mir da noch ein wenig auf die Sprünge helfen könntet.

    LG Andi

    Tomcraft

    • modified Team
    • Gravatar
    • Beiträge: 46.370
    • Geschlecht:
    box_categories.html php-Code ausführen
    Antwort #4 am: 06. Februar 2011, 00:14:12
    [...]
    Leider gibt es ja keine Entwicklerdoku für xtc. Mir sind da die Zusammenhänge noch nicht so wirklich klar, wann was warum aufgerufen wird. Ich komme halt aus der WP-Ecke...
    [...]

    Es gibt aber ein Wiki. ;-)

    Grüße

    Torsten

    dully007

    • Frisch an Board
    • Beiträge: 53
    box_categories.html php-Code ausführen
    Antwort #5 am: 06. Februar 2011, 09:48:15
    Hi Torsten,

    *uups* das kannte ich noch nicht.
    Super, damit erklärt sich nun auch die Boxenstruktur.

    Nun fehlt mir nur noch die Möglichkeit Variable, bzw. den Wert {#heading_categories#} in PHP auszulesen. Gibt es da eine spezielle Funktion für, oder wie komme ich an den Wert?

    Danke schon einmal und LG

    Andi

    Matt

    • Experte
    • Beiträge: 4.241
    box_categories.html php-Code ausführen
    Antwort #6 am: 06. Februar 2011, 10:38:04
    Du kannst {#heading_categories#} nicht dynamisch einen anderen Wert zuweisen (außer, du änderst bei jedem Aufruf lang_german.conf, was du nicht wirklich willst). Du kannst aber z.B:

    Code: PHP  [Auswählen]
    $box_smarty->assign('HEADING_CATEGORIES', 'irgendein_dynamisches_bild.jpg');
    in source/boxes/categories.php zuweisen und das dann im zugehörigen Template mit {$HEADING_CATEGORIES} benutzen.

    dully007

    • Frisch an Board
    • Beiträge: 53
    box_categories.html php-Code ausführen
    Antwort #7 am: 06. Februar 2011, 10:45:42
    Hi Matt,

    ... OK, da habe ich mich wohl blöd ausgedrückt.
    Ich brauche für meine php-Funktion in categories.php den Wert von {#heading_categories#} aus der lang_german.conf.
    Ich möchte in der Kategoriebox mittels des in der lang_german.conf angegebenen Textes eine Grafik erzeugen.
    Die Fragestellung lautet also:
    Wie bekomme ich den Wert aus der lang_german.conf in der categories.php zur Verfügung gestellt?

    Für die Wertzuweisung in der box_categories.html hatte ich schon mal geschaut, und dort dann analog zu {$BOX_CONTENT} einen neuen Header gebaut, den ich mittels der categories.php befülle.
    Das klappt schon (Dank des Hinweises von Torsten mit dem Wiki!).

    Code: PHP  [Auswählen]
    <h2 class="categoryheader">{$BOX_HEADER}</h2>
    <ul id="categorymenu">{$BOX_CONTENT}</ul>
     
    LG Andi

    dully007

    • Frisch an Board
    • Beiträge: 53
    box_categories.html php-Code ausführen
    Antwort #8 am: 06. Februar 2011, 13:00:13
    Hi Ihr,
    nun habe ich mittels einer Smarty-Dokumentation was gefunden:

    Code: PHP  [Auswählen]
    $box_smarty->config_load(DIR_FS_CATALOG.'lang/'.$_SESSION['language'].'/lang_'.$_SESSION['language'].'.conf', 'boxes');
    $header_categories = $box_smarty->get_config_vars('heading_categories');
    $box_header_string = '<img src="'.$header_categories.'" alt="'.$header_categories.'" />';

    ...

    $box_smarty->assign('BOX_HEADER', $box_header_string);
     
    Damit klappt es fast.

    Leider habe ich noch mit der Erzeugung der Grafiken Probleme.

    Unter Wordpress funktioniert der Code:

    Code: PHP  [Auswählen]
    function get_font_graphics($groesse, $schriftart, $text, $schriftfarbe, $grafikname, $typ="png", $hintergrundfarbe="646464", $schriftpfad="/home/www/xxx/html/shop/templates/pantarhei/", $schriftordner="font/", $tempordner="temp/")
        {
                    if ($typ=="png")
                            header("Content-type: image/png");
                    else
                            header("Content-type: image/gif");

                    $textwerte = imagettfbbox($groesse, 0, $schriftpfad.$schriftordner.$schriftart, $text);
                    $xabstand=$groesse/4;
                    $yabstand=$groesse/3;
                    $textwerte[2] += $xabstand*2;
                    $textwerte[5] = abs($textwerte[5]);
                    $textwerte[5] +=  $yabstand*2;
                    $image = imagecreate($textwerte[2], $textwerte[5]);
                    $farbe_body = imagecolorallocatealpha($image, hexdec(substr($hintergrundfarbe, 0, 2)), hexdec(substr($hintergrundfarbe, 2, 2)), hexdec(substr($hintergrundfarbe, 4, 2)), 127);
                    $farbe_b = imagecolorallocate($image, hexdec(substr($schriftfarbe, 0, 2)), hexdec(substr($schriftfarbe, 2, 2)), hexdec(substr($schriftfarbe, 4, 2)));
                    $textwerte[5] -= $yabstand+2;
                    imagettftext($image, $groesse, 0, $xabstand, $textwerte[5], $farbe_b, $schriftpfad.$schriftordner.$schriftart, $text);
                    if ($typ=="png")
                            imagepng($image, $schriftpfad.$tempordner.$grafikname.'.png');
                    else
                            imagegif($image, $schriftpfad.$tempordner.$grafikname.'.gif');
                    imagedestroy($image);
                    if ($typ=="png")
                            return $tempordner.$grafikname.".png";
                    else
                            return $tempordner.$grafikname.".gif";
        }
     
    perfekt.
    Unter xtc habe ich aber Probleme mit der Header-Anweisung

    Code: PHP  [Auswählen]
    header("Content-type: image/png");
    Das System sagt mir dann immer dass die Datei "http://www.domain.de/index.php" keine gültige png-Datei ist.
    Was macht denn nun der Shop hierbei anders als Wordpress?
    Ohne diese Anweisung läuft zwar der Shop, aber die Grafiken werden nicht vernünftig erzeugt.

    Danke und LG

    Andi

    Matt

    • Experte
    • Beiträge: 4.241
    box_categories.html php-Code ausführen
    Antwort #9 am: 06. Februar 2011, 22:01:58
    Ich versteh das Problem nicht. Es gibt genau einen Eintrag in lang_german.conf für heading_categories. Warum erzeugst du das Bild nicht einmal und legst es irgendwohin? Warum muss das bei jedem Aufruf dynamisch erzeugt werden?

    dully007

    • Frisch an Board
    • Beiträge: 53
    box_categories.html php-Code ausführen
    Antwort #10 am: 06. Februar 2011, 22:22:54
    Hi Matt,

    naja, weil ich das Ganze auch noch an anderen Stellen einsetzen möchte. Z.B. bei den Bestsellern, und auch noch bei den Artikeln.
    Der Shop sollte dieses automatisch erledigen können, da sonst der Verwaltungsaufwand zu groß wird.

    LG Andi

    Matt

    • Experte
    • Beiträge: 4.241
    box_categories.html php-Code ausführen
    Antwort #11 am: 07. Februar 2011, 08:44:23
    Wo bindest du denn die obige Funktion ein, die dir ein Bild erzeugt? Du solltest das in eine eigene Datei auslagern und das Bild irgendwo im Dateisystem ablegen und dann nur dieses einbinden. Und ein sinnvolles Caching implementieren, damit nicht bei jedem Aufruf sinnlos Bilder erzeugt werden. Oder gleich auf eine zeitgemäße Technik umsteigen.

    dully007

    • Frisch an Board
    • Beiträge: 53
    box_categories.html php-Code ausführen
    Antwort #12 am: 07. Februar 2011, 09:38:54
    Hi Matt,

    Wo bindest du denn die obige Funktion ein, die dir ein Bild erzeugt? [...]

    In meiner categories.php habe ich folgendes eingefügt:

    Code: PHP  [Auswählen]
    require_once (DIR_FS_CATALOG.'templates/'.CURRENT_TEMPLATE.'/source/functions.php');

    $box_smarty->config_load(DIR_FS_CATALOG.'lang/'.$_SESSION['language'].'/lang_'.$_SESSION['language'].'.conf', 'boxes');
    $header_categories = $box_smarty->get_config_vars('heading_categories');
    $box_header_string = '<img src="'.HTTP_SERVER.DIR_WS_CATALOG.'templates/'.CURRENT_TEMPLATE.'/'.get_font_graphics(12, "xx.ttf", $header_aktuell, "F00", $header_aktuell)'" alt="'.$header_aktuell.'" />';                                       

    ...

    $box_smarty->assign('BOX_HEADER', $box_header_string);
     
    [...] Du solltest das in eine eigene Datei auslagern und das Bild irgendwo im Dateisystem ablegen und dann nur dieses einbinden. [...]

    Das habe ich ja schon gemacht, siehe oben.

    [...] Und ein sinnvolles Caching implementieren, damit nicht bei jedem Aufruf sinnlos Bilder erzeugt werden. [...]

    hmm, hast du da konkrete Tipps?

    [...] Oder gleich auf eine zeitgemäße Technik umsteigen.

    Was wäre denn eine zeitgemäße Technik?
    Es geht halt darum einige Überschriften in der Hausschrift darzustellen.
    HTML unterstützt sowas wohl erst ab Version 5, weshalb man darauf wohl nicht setzen kann.
    Evtl. gäbe es noch die Option dies per Grafikengine zu erledigen?

    LG Andi

    Matt

    • Experte
    • Beiträge: 4.241
    box_categories.html php-Code ausführen
    Antwort #13 am: 07. Februar 2011, 13:20:14
    [...]
    Das habe ich ja schon gemacht, siehe oben.
    [...]

    Nein, du rufst innerhalb des normalen Seitengenerierungsprozesses eine Funktion auf, die dir (noch mal) einen header schickt. Deshalb ist index.php am Ende auch keine gültige png-Datei. Was ich meinte war:

    Code: PHP  [Auswählen]
    <img src="HeadlineAlsBild.php?string=Irgendwas%20mit%20urlencode" alt=""/>
     
    [...]
    hmm, hast du da konkrete Tipps?
    [...]

    Bild auf die Platte schreiben, schauen wie alt es ist und nur, wenn es den von dir definierten Zeitwert überschreitet, neu erzeugen. Wäre so die einfachste Variante.

    [...]
    Was wäre denn eine zeitgemäße Technik?
    [...]

    @font-face. Alternativ Cufon. Setzt natürlich beide Male voraus, dass die Schrift dafür zur Verfügung steht bzw. deren Lizenz es erlaubt.

    [...]
    HTML unterstützt sowas wohl erst ab Version 5, weshalb man darauf wohl nicht setzen kann.
    [...]

    Du meinst vermutlich @font-face, was kein Teil von HTML5 ist, sondern seit CSS2 im CSS-Standard drin ist. Die Browserunterstützung war aber lange Zeit in der Tat mangelhaft, mittlerweile sind wir aber auf einem guten Weg.

    4 Antworten
    1596 Aufrufe
    10. August 2021, 15:52:47 von rakna
    1 Antworten
    1855 Aufrufe
    26. Dezember 2012, 07:14:32 von jannemann
    3 Antworten
    3548 Aufrufe
    25. Mai 2012, 17:44:46 von Patrix