Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

PHP-Hilfe / Kein Zugriff auf Variable in Funktion

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Neues Thema Antworten
euroexchange.de
PostRank 6
PostRank 6
Beiträge: 471
Registriert: 02.06.2007, 13:49

Beitrag von euroexchange.de » 22.08.2009, 11:59

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.
Zuletzt geändert von euroexchange.de am 22.08.2009, 13:19, insgesamt 3-mal geändert.

Anzeige von ABAKUS

von Anzeige von ABAKUS »


Hochwertiger Linkaufbau bei ABAKUS:
  • Google-konformer Linkaufbau
  • nachhaltiges Ranking
  • Linkbuilding Angebote zu fairen Preisen
  • internationale Backlinks
Wir bieten Beratung und Umsetzung.
Jetzt anfragen: 0511 / 300325-0

Wirths Media
PostRank 9
PostRank 9
Beiträge: 2050
Registriert: 20.09.2004, 20:25

Beitrag von Wirths Media » 22.08.2009, 12:17

$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

Wirths Media
PostRank 9
PostRank 9
Beiträge: 2050
Registriert: 20.09.2004, 20:25

Beitrag von Wirths Media » 22.08.2009, 12:20

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.

Anzeige von ABAKUS

von Anzeige von ABAKUS »

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

Jetzt anfragen: 0511 / 300325-0.


euroexchange.de
PostRank 6
PostRank 6
Beiträge: 471
Registriert: 02.06.2007, 13:49

Beitrag von euroexchange.de » 22.08.2009, 12:21

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 :-(

Synonym
PostRank 10
PostRank 10
Beiträge: 3708
Registriert: 09.08.2008, 02:55

Beitrag von Synonym » 22.08.2009, 12:27

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"}

euroexchange.de
PostRank 6
PostRank 6
Beiträge: 471
Registriert: 02.06.2007, 13:49

Beitrag von euroexchange.de » 22.08.2009, 12:37

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?

Anonymous

Beitrag von Anonymous » 22.08.2009, 13:30

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...

euroexchange.de
PostRank 6
PostRank 6
Beiträge: 471
Registriert: 02.06.2007, 13:49

Beitrag von euroexchange.de » 22.08.2009, 13:48

@net(t)worker.

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

Danke!

Anonymous

Beitrag von Anonymous » 22.08.2009, 14:01

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....

euroexchange.de
PostRank 6
PostRank 6
Beiträge: 471
Registriert: 02.06.2007, 13:49

Beitrag von euroexchange.de » 23.08.2009, 02:34

Schau doch mal auf die Funktion:

Textlinks selbst erstellen


Nochmal vielen Dank!

Freue mich über Feeback, Meinungen und Anregungen.

euroexchange.de
PostRank 6
PostRank 6
Beiträge: 471
Registriert: 02.06.2007, 13:49

Beitrag von euroexchange.de » 24.08.2009, 17:49

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.

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag