Seite 1 von 1

PHP-Hilfe / Kein Zugriff auf Variable in Funktion

Verfasst: 22.08.2009, 11:59
von euroexchange.de
Hallo @all

Ich werde noch ganz wuschig :-(

In meinem Portal kann jeder Inserent eine URL zu seiner Seite angeben. Diese wird dann automatisch mit dem angegebenen Titel sowie den angegebenen Keywords als Linktext verlinkt.

Jetzt möchte ich das aber überarbeiten und will, das der Inserent einige Keywords und Phrasen angeben kann die direkt aus dem Text heraus mit seiner URL verlinkt werden.

Hierzu nutze ich eine Callback-Funktion die im Quelltext alle Keywords durch Links mit Linktext ersetzt.

Hierzu habe ich folgendes:

Code: Alles auswählen

{assign var=kurl value=$ads.e_8.value}
{assign var=eurl value=$ads.e_1.value}

{php}

$kurl = $this->get_template_vars('kurl');
$eurl = $this->get_template_vars('eurl');

// Variablen sind gesetzt und ich habe hier noch Zufriff darauf

function callback($buffer)
{
    global $kurl, $eurl;
    $buffer = str_replace($kurl, $eurl, $buffer ); // Fehler. Das macht er nicht.
    return (str_replace("Wenn", "Dann", $buffer)); // Das geht. Er ersetzt Wenn durch Dann.
}
ob_start("callback"); // Gibt den geänderten Quelltext aus.

{/php}

Ich bekomme keinen Zufriff auf die Variablen innerhalb der Funktion. Weise ich den Variablen einen festen Wert zu erkennt der diese nur wenn ich Zahlen als festen Wert zuweise. Weise ich der Variablen jedoch feste Begriffe zu kann ich darauf ebenfalls nicht zugreifen.

Ich habe das in Smarty implementiert.

Danke für Eure Hilfe.

Verfasst:
von

Verfasst: 22.08.2009, 12:17
von Wirths Media
$GLOBALS["variable"].

Aber es scheint alles richtig definiert zu sein. https://us2.php.net/manual/de/language. ... .scope.php

Hast du die Variable mal vorher ausgegeben, ob diese überhaupt einen Inhalt hat?


Gruß
Daniel

Verfasst: 22.08.2009, 12:20
von Wirths Media
Ich bekomme keinen Zufriff auf die Variablen innerhalb der Funktion. Weise ich den Variablen einen festen Wert zu erkennt der diese nur wenn ich Zahlen als festen Wert zuweise. Weise ich der Variablen jedoch feste Begriffe zu kann ich darauf ebenfalls nicht zugreifen.
Da hätte ich vielleicht weiter lesen sollen. Die Variablen sind falsch definiert?!

Mal mit https://de2.php.net/manual/de/function.gettype.php prüfen.

Verfasst:
von
SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


Verfasst: 22.08.2009, 12:21
von euroexchange.de
Hallo calusa-xx.

Ja, habe ich. Die Variable ist dann innerhalb des PHP verfügbar und kann per:

echo $kurl;
echo $eurl;

auch ausgegeben werden, aber eben nicht mehr in der Funktion.

Wenn ich die gleiche Funktion in einer normalen HTML-Seite integriere - also dann mit definierten Variablen - klappt es Problemlos.

Nur halt nicht in meinem PHP-Template :-(

Verfasst: 22.08.2009, 12:27
von Synonym
Hm, keine Ahnung ob das überhaupt geht mit Smarty. Du weißt erst die beiden Smarty-Variablen zu um die dann wieder in PHP zu übernehmen und dann das str_replace hinterher.... ob_start als Ausgabepuffer ist da wohl auch der falsche Ansatz, oder wird der auch irgendwo wieder ausgegeben?

Mach das Ersetzen doch direkt im Code und nicht im Template, oder versuche einfach mal die Smarty eigenen Funktionen zum Ersetzen.

{$VARIABLENNAME:replace:"suche":"ersetze"}

Verfasst: 22.08.2009, 12:37
von euroexchange.de
calusa-xx hat geschrieben:
Ich bekomme keinen Zufriff auf die Variablen innerhalb der Funktion. Weise ich den Variablen einen festen Wert zu erkennt der diese nur wenn ich Zahlen als festen Wert zuweise. Weise ich der Variablen jedoch feste Begriffe zu kann ich darauf ebenfalls nicht zugreifen.
Da hätte ich vielleicht weiter lesen sollen. Die Variablen sind falsch definiert?!

Mal mit https://de2.php.net/manual/de/function.gettype.php prüfen.
Falsch definiert? Ich stehe gerade auf der Leitung. Wie würdest Du sie definieren?

Verfasst: 22.08.2009, 13:30
von net(t)worker
hier: https://www.smarty.net/manual/de/langua ... on.php.php
Technical Note: Um auf PHP-Variablen in {php}-Blöcken zugreifen zu können, kann es nötig sein, die Variable als global zu deklarieren. Der {php}-Blöck läuft nämlich nicht in einem globalen Kontext, sondern im Kontext der method des laufenden $smarty-Objektes.
du hast die variabeln nicht wirklich global definiert...

du müsstest es so machen:

Code: Alles auswählen

{php}

$GLOBALS['kurl'] = $this->get_template_vars('kurl');
$GLOBALS['eurl'] = $this->get_template_vars('eurl');

// Variablen sind gesetzt und ich habe hier noch Zufriff darauf

nur dann kanst du in functionen auch über globals darauf zugreifen...

Verfasst: 22.08.2009, 13:48
von euroexchange.de
@net(t)worker.

Es funktioniert, es funktioniert, es ... funktioniert.

Danke!

Verfasst: 22.08.2009, 14:01
von net(t)worker
ist aber dennoch eine unsaubere Lösung....

https://www.smarty.net/manual/de/variab ... ndling.php
ACHTUNG: Es wird dringend davon abgeraten, PHP-Code in Templates einzubetten.
https://www.smarty.net/manual/de/langua ... on.php.php
php
...Dieses Tag ist nur für erfahrene Benutzer gedacht und wird auch von diesen normalerweise nicht benötigt.
es ist im grunde ja auch keine Sache des Templates, sondern gehört in die Logik des scripts, also in den normalen php code, nicht ins Template....

und wenn es auf jeden Fall ins Template soll, sollteste dies in einer function unterbringen, diese in Smarty registrieren und aus dem Template aus aufrufen...

oder über ein plugin realisieren....

Verfasst: 23.08.2009, 02:34
von euroexchange.de
Schau doch mal auf die Funktion:

Textlinks selbst erstellen


Nochmal vielen Dank!

Freue mich über Feeback, Meinungen und Anregungen.

Verfasst: 24.08.2009, 17:49
von euroexchange.de
Ich habe es jetzt doch noch ganz anders umgesetzt.

Problem war, das alle eingegebenen Keywords in der Anzeige durch einen Link ersetzt wurden und das die Inserenten Ihre Keywords bei der Eingabe teilweise nicht durch Komma trennten, somit also das Problem mit dem Delimiter für "trim" schwer umzusetzen war.

Jetzt wird in der Anzeige einfach eine Textpassage mit /START/ und /END/ gekennzeichnet und dann als Linktext herangezogen.