„Echo-Funktion“ in Variable speichern

 


honsey
Gast

15.01.11
13:04 Uhr
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 danke
Link zu diesem Beitrag in die Zwischenablage kopieren
phloo
Veteran

15.01.11
14:18 Uhr
Hast du mal die Source zum Plugin?
Link zu diesem Beitrag in die Zwischenablage kopieren
myidol
Dauergast

15.01.11
14:18 Uhr
ich mutmaße mal:
Du rufst eine funktion auf:
  1. generiere_html();
Quelltext in Zwischenablage kopieren

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

  1. $html = generiere_html();
  2. // hier jetzt deine ersetzungen
  3. echo $html;
Quelltext in Zwischenablage kopieren
Link zu diesem Beitrag in die Zwischenablage kopieren
loeffler
Veteran

15.01.11
14:47 Uhr
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.
Link zu diesem Beitrag in die Zwischenablage kopieren
Rusty
Veteran

15.01.11
16:11 Uhr
Editiert: 15.01.11, 16:19 Uhr
http://php.net/manual/de/function.ob-start.php

Das erste Beipiel löst genau Deine Problemstellung.
Link zu diesem Beitrag in die Zwischenablage kopieren
honsey
Gast

15.01.11
17:14 Uhr
danke mit dem tipp von rusty funktionierts!

genausowas hab ich gesucht, richtig – weil ich alle hacks möglichst innerhalb des themes haben will, wegen updates etc.
Link zu diesem Beitrag in die Zwischenablage kopieren
Clemens
Veteran

15.01.11
17:21 Uhr
Ist aber relativ unperformant.
Link zu diesem Beitrag in die Zwischenablage kopieren
honsey
Gast

15.01.11
17:51 Uhr
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.
Link zu diesem Beitrag in die Zwischenablage kopieren
phloo
Veteran

15.01.11
18:07 Uhr
Kannste doch mit JQuery
Link zu diesem Beitrag in die Zwischenablage kopieren
honsey
Gast

15.01.11
19:53 Uhr
ich mache gerne so viel wie möglich serverseitig. planlos
Link zu diesem Beitrag in die Zwischenablage kopieren
Rusty
Veteran

15.01.11
20:57 Uhr
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? planlos
Link zu diesem Beitrag in die Zwischenablage kopieren
stese
Moderator

16.01.11
21:30 Uhr
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
Link zu diesem Beitrag in die Zwischenablage kopieren
JanB
Veteran

17.01.11
23:29 Uhr
Einfach Caching verwenden? planlos
Link zu diesem Beitrag in die Zwischenablage kopieren
honsey
Gast

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

für größere sachen würde ich gerne mal mit drupal umgehen können… heul

ich kann mich leider überhaupt nicht in das theme-system reindenken mit diesen blocks, boxes, modules, etc…
Link zu diesem Beitrag in die Zwischenablage kopieren
Clemens
Veteran

18.01.11
00:23 Uhr
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.
Link zu diesem Beitrag in die Zwischenablage kopieren
stese
Moderator

18.01.11
08:45 Uhr
JanB schrieb am 17.01.11, 23:29 Uhr:

Einfach Caching verwenden? planlos

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
  1. <?php while (have_posts()) : the_post(); ?>
Quelltext in Zwischenablage kopieren in wordpress ist einfach widerlich.
Link zu diesem Beitrag in die Zwischenablage kopieren
JanB
Veteran

18.01.11
09:29 Uhr
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.
Link zu diesem Beitrag in die Zwischenablage kopieren
tole42
Zaungast

18.01.11
18:03 Uhr
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:

  1. ob_start();
  2. wordpress_plugin_echo();
  3. $sOut = ob_get_contents();
  4. ob_end_clean();
Quelltext in Zwischenablage kopieren

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
Link zu diesem Beitrag in die Zwischenablage kopieren
honsey
Gast

18.01.11
19:26 Uhr
danke trotzdem! danke
Link zu diesem Beitrag in die Zwischenablage kopieren
 
#