Du bist nicht angemeldet (anmelden)
Seite 1
„Echo-Funktion“ in Variable speichern
Ich weiss nicht, wie ich das Problem am besten beschreibe, deshalb kann ich leider auch nicht danach googlen. Bin mir sicher, dass es kein großes Ding ist…
Eine Wordpress-Plugin-Funktion, die ich nutze (WMPL, icl_link_to_element) spuckt sofort HTML raus, ohne dass ich ein echo davorstellen muss.
Leider muss ich dieses HTML nochmal bearbeiten und per regex zusätzliche Attribute in den tags verstauen.
Wie kann ich jetzt also den Inhalt der Funktion in eine Variable speichern, um diese dann bearbeiten zu können?
Danke
Eine Wordpress-Plugin-Funktion, die ich nutze (WMPL, icl_link_to_element) spuckt sofort HTML raus, ohne dass ich ein echo davorstellen muss.
Leider muss ich dieses HTML nochmal bearbeiten und per regex zusätzliche Attribute in den tags verstauen.
Wie kann ich jetzt also den Inhalt der Funktion in eine Variable speichern, um diese dann bearbeiten zu können?
Danke
ich mutmaße mal:
Du rufst eine funktion auf:
dann ist innerhalb dieser Funktion ein echo, den du nicht umgehen kannst.
Suche diesen echo und mache daraus ein RETURN
Dann kannst du beim Funktionsauf
Du rufst eine funktion auf:
generiere_html();
dann ist innerhalb dieser Funktion ein echo, den du nicht umgehen kannst.
Suche diesen echo und mache daraus ein RETURN
Dann kannst du beim Funktionsauf
$html = generiere_html();// hier jetzt deine ersetzungenecho $html;
Ich denke, dass er das Bearbeiten der Funktion bzw. des Plugins umgehen will, da er dann nach jedem Update des Plugins die Funktion neu schreiben müsste.
Eine Alternative wäre es, dir den Code der Funktion anzuschauen und daraus eine eigene, unabhängige zu schreiben, die dir das ganze per return ausgibt. Ist zwar immer noch nicht schön, aber immerhin musst du dann nicht bei jedem Update an der Funktion rumwurschteln.
Eine Alternative wäre es, dir den Code der Funktion anzuschauen und daraus eine eigene, unabhängige zu schreiben, die dir das ganze per return ausgibt. Ist zwar immer noch nicht schön, aber immerhin musst du dann nicht bei jedem Update an der Funktion rumwurschteln.
Editiert: 15.01.11, 16:19 Uhr
http://php.net/manual/de/function.ob-start.phpDas erste Beipiel löst genau Deine Problemstellung.
genausowas hab ich gesucht, richtig – weil ich alle hacks möglichst innerhalb des themes haben will, wegen updates etc.
na mein problem ist halt, dass ich im theme die menüpunkte generieren lasse mit dieser funktion icl_link_to_element. das spuckt mir dann „<a href=“…“>…</a>“ aus. ich muss aber an einer einzigen stelle dem a-tag ne id verpassen.
Geht mal bitte jemand auf den Performanzeinwand ein. Wieviele 10.000 Visits braucht man pro Tag, dass das ins Gewicht fällt? Da gibts genau die gesuchte Funktion und dann sollte er wegen einiger Mikrosekunden drauf verzichten?
der performanceverlust/-gewinn kann mehrere faktoren haben, je nachdem wie lang und komplex die funktion ist. hat man keine andere möglichkeit, weil das system kacke ist (eben wie wordpress) kann man dadurch vll. sogar performancegewinne erzeugen, indem man die gepufferten ausgaben (sofern sie in intervallen gepuffert werden) wegcached und den inhalt der variable in einem cache auch bei weiteren, evtl. nicht zusammenhängenden requests nutzt. bei einer sauberen architektur, wo man eh alles manipulieren und schon mit gecachten inhalten arbeitet, ist es tatsache ein performance und speicher verlust, da man einige performance ziele auch ohne ob_* erreichen kann. grundsätzlich bedeutet ja der einsatz: achtung php, geh mal bitte aus deiner gewohnten umgebung raus, arbeite alles wie gewohnt ab aber speichere den inhalt irgendwo in einem zusätzlichen speicher und gib ihn mir danach zurück.gerade die nachträgliche manipulation mit preg_replace etckommt dann im regelfall zur normalen ausführzeit hinzu (und die preg geschichten können, wenn schlecht geschrieben (und das sind die meisten regex) zu performance engpässen führen. wie gesagt: ob_* geschichten sind eigentlich notlösungen die nur dann zum einsatz kommen, wenn deine software eben keine ausreichende flexibilität bietet.
aber auch das sei gesagt: man kann performanceverlust/gewinn nicht an visits oder requests allgemein festmachen, weil es immer auf die gekapselten funktionen innen drin ankommt. bei ganz kleinen seiten kanns evtl. egal sein. aber ich hab auch schon wordpress systeme mit wenigen tausend requests im monat baden gehen sehen, weil einige plugins einfach kacke geschrieben waren und evtl. teure mysql aktionen zuhauf pro request ausführten.
aber grundsätzlich: wordpress = böse. aber für den laien meist das einzig bedienbare tool. (und bevor man fragt: auch drupal oder joomla sind böse, wenn man sich die funktionalitäten nicht genau anschaut
aber auch das sei gesagt: man kann performanceverlust/gewinn nicht an visits oder requests allgemein festmachen, weil es immer auf die gekapselten funktionen innen drin ankommt. bei ganz kleinen seiten kanns evtl. egal sein. aber ich hab auch schon wordpress systeme mit wenigen tausend requests im monat baden gehen sehen, weil einige plugins einfach kacke geschrieben waren und evtl. teure mysql aktionen zuhauf pro request ausführten.
aber grundsätzlich: wordpress = böse. aber für den laien meist das einzig bedienbare tool. (und bevor man fragt: auch drupal oder joomla sind böse, wenn man sich die funktionalitäten nicht genau anschaut
ich finde wordpress toll: in kombination mit den richtigen plugins, kann man wirklich recht gute seiten schnell bauen. und vor allem: das backend ist nicht so kompliziert
mein standardpaket: wordpress + wpml + magic fields + whitelabel cms + super cache
für größere sachen würde ich gerne mal mit drupal umgehen können…
ich kann mich leider überhaupt nicht in das theme-system reindenken mit diesen blocks, boxes, modules, etc…
mein standardpaket: wordpress + wpml + magic fields + whitelabel cms + super cache
für größere sachen würde ich gerne mal mit drupal umgehen können…
ich kann mich leider überhaupt nicht in das theme-system reindenken mit diesen blocks, boxes, modules, etc…
Man sollte jetzt - nur weil man Möglichkeiten zum Caching hat - nicht dazu übergehen alles lahm umzusetzen und sich dann aufs Caching zu verlassen. Sowas geht immer nach hinten los.
JanB schrieb am 17.01.11, 23:29 Uhr:
Einfach Caching verwenden?
es gibt durchaus plugins und funktionen, die den cache nicht berühren oder absichtlich umgehen - gerade statistiktools etc verhindern das. daher ne blöde idee, sich die plugins nicht vorher anzuschauen
honsey schrieb am 17.01.11, 23:41 Uhr:
ich finde wordpress toll: in kombination mit den richtigen plugins, kann man wirklich recht gute seiten schnell bauen. und vor allem: das backend ist nicht so kompliziert
mein standardpaket: wordpress + wpml + magic fields + whitelabel cms + super cache
und jetzt bau mal was multilingual oder was mit ein paar sonderwünschen auf. die backend komplexität wird extrem viel größer.
aber nichts ist schlimmer als die prozedurale programmierung in den systemen. sowas wie
<?php while (have_posts()) : the_post(); ?>
Fänd ich schön, wenn du das etwas ausführlicher beleuchten oder zumindest auf diese strittigen Themen verlinken könntest.
Ich nutze Wordpress sowohl im eigenen Gewerbe als auch auf der Arbeit und durchaus auch in etwas größeren Maßstäben (18 sprachig, 50 000 pageviews) . Da interessiert mich das natürlich, was du schreibst, weil es nicht unbegründet klingt und mir das Wissen fehlt das zu durchschauen.
Ich nutze Wordpress sowohl im eigenen Gewerbe als auch auf der Arbeit und durchaus auch in etwas größeren Maßstäben (18 sprachig, 50 000 pageviews) . Da interessiert mich das natürlich, was du schreibst, weil es nicht unbegründet klingt und mir das Wissen fehlt das zu durchschauen.
Editiert: 18.01.11, 18:13 Uhr
so extra mich einmal hier angemeldet nur um dir zu helfen. Sonst lese ich ja immer nur mit.Wenn ich dein Problem richtig verstanden haben sucht du folgende Funktion:
ob_start
Beispiel:
ob_start();wordpress_plugin_echo();$sOut = ob_get_contents();ob_end_clean();
der Output der sonst direkt ausgeben wird ist nun in $sOut gespeicht.
leider hat die Freischaltung hier zu lange gedauert. Sehe gerade das jmd schon die Lösung gepostet hat
