zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Serveradministration und serverseitige Scripte
Seite neu laden Und wieder das leidige preg_replace.

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 29.03.2008, 23:30
Benutzerbild von paracelsus
be simple
XHTMLforum-Kenner
Thread-Ersteller
 
Registriert seit: 16.07.2007
Ort: Kapfenberg - Austria, einige meinen am "Anus Mundi"
Beiträge: 4.788
paracelsus ist einfach richtig nettparacelsus ist einfach richtig nettparacelsus ist einfach richtig nettparacelsus ist einfach richtig nett
Standard Und wieder das leidige preg_replace.

Ich hab ja so einiges an Ideen, aber leider bin ich mehr Designer als php´ler.
Nun stellt sich mir wieder folgendes Problem:
Da ich innerhalb meines CMS mit mod_rewrite arbeite - was hinlänglich gut ist - ist es im Online Editor für die Redakteure nicht möglich (ausser nach langer Schulung) einen Weblink auf eine andere Seite INNERHALB der Website zu setzen. Dazu müsste der arme ja die nötigen Parameter kennen.
An sich bräuchte er nur zuerst die Seite aufrufen und den Url kopieren, und dann in das Kontextmenü - wie hier im Forum - einzusetzen.
Aber.
Es soll auch möglich sein, über die Links Seiten zu erreichen, die nicht in der Menüstruktur "hängen", also Seiten die nur über Teaserboxen oder inline Links erreichbar sind (spezielle Veranstaltungen, Produkte etc.)
So, meine Idee:
Ich lass den Redakteur einen Platzhalter setzen, der wird onthefly ausgelesen und gegen die richtigen Parameter ersetzt. Der Quelltext sieht dann erstmal so aus:
Code:
<a href="http://%LINK%Willkommen">
%LINK% auszutauschen ist kein Problem für mich, aber wie komme ich an den nachstehenden Text ran (hier Willkommen)? Der muß nämlich überarbeitet werden (Kleinbuchstaben und Umlaute tauschen).

Ich bräuchte also eine Funktion die mir diesen Text (der immer anders sein kann) in einer Variable liefert, mit der ich arbeiten kann. Ich schaff es nicht, da ich das preg_replace einfach nicht raffe - nicht das ich es nicht probiert habe
Bitte um Hilfe.
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 30.03.2008, 00:06
Benutzerbild von mantiz
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 25.02.2007
Beiträge: 2.843
mantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz sein
Standard

So ungefähr
PHP-Code:
preg_replace('/href\s*\=\s*\"(\%LINK\%)([^\"]*)\"/''replacestring'$html); 
könnte es evtl. aussehen.
In $1 wäre der Link und in $2 alles, was danach kommt, bis exklusive dem Anführungszeichen.

Für mein CMS, welches sich aber noch im Alpha-Stadium befindet hab' ich mal ein Plugin für mod_rewrite geschrieben, welches momentan so aussieht
PHP-Code:
$engine $cms->Vars['engine'];
$matches = array();
$pattern '/(?:href|action|src)\s*\=\s*[\"\'].*?(' str_replace('/''\/'str_replace('?''\\?'$engine)) . '[^\"]*)/is';

preg_match_all($pattern$output$matches);

foreach (
$matches[1] as $key => $match) {
    
$match str_replace($engine''$match);
    
$match str_replace('&amp;''&'$match);
    
parse_str($match$link_vars);
    
    
$new_link_vars = array(
        
'site'    => $link_vars['site'], 
        
'layout'  => $link_vars['layout'],  
        
'catalog' => $link_vars['catalog'], 
        
'element' => $link_vars['element']
    );
    
$new_link_vars1 $new_link_vars;
    
$new_link_vars = array();
    unset(
$link_vars['site']);
    unset(
$link_vars['layout']);
    unset(
$link_vars['catalog']);
    unset(
$link_vars['element']);
    foreach (
$link_vars as $k => $v) {
        
$new_link_vars[$k] = $v;
    }
    
    
$query_str http_build_query($new_link_vars'''&amp;');
    
    
$match $engine http_build_query($new_link_vars'''&amp;');
    
    
$match  '/' $cms->Config['basepath'];
    
$match .= $new_link_vars1['site']    ? $new_link_vars1['site']    . '/' '';
    
$match .= $new_link_vars1['layout']  ? $new_link_vars1['layout']  . '/' '';
    
$match .= $new_link_vars1['catalog'] ? $new_link_vars1['catalog'] . '/' '';
    
$match .= $new_link_vars1['element'] ? $new_link_vars1['element']       : '';
    
$match .= $query_str '?' $query_str '';
    
    
$output str_replace($matches[1][$key], $match$output);

$engine ist der Link zur index.php, welche alles steuert.

Vielleicht hilft Dir das ja ein wenig und Du kannst evtl. das eine oder andere gebrauchen.
Es werden Links der Form /site/layout/catalog/element?query_str erzeugt, welches aus /index.php?site=site&layout=layout&catalog=catalog& element=element&query_str generiert werden.

Ist absolut nicht perfekt, aber bisher hatte ich noch keine Lust das weiter auszubauen, da gibt es noch genug andere Baustellen.
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 30.03.2008, 00:14
Benutzerbild von paracelsus
be simple
XHTMLforum-Kenner
Thread-Ersteller
 
Registriert seit: 16.07.2007
Ort: Kapfenberg - Austria, einige meinen am "Anus Mundi"
Beiträge: 4.788
paracelsus ist einfach richtig nettparacelsus ist einfach richtig nettparacelsus ist einfach richtig nettparacelsus ist einfach richtig nett
Standard

Superschnelle Antwort, Danke.
Ich teste mal an, und kuck mir das durch.
Danke für das snippet!
Mit Zitat antworten
  #4 (permalink)  
Alt 30.03.2008, 00:19
Benutzerbild von mantiz
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 25.02.2007
Beiträge: 2.843
mantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz sein
Standard

Hab's halt zufällig jetzt gerade gelesen.

Ich hab' gerade noch gesehen, dass ich das eine oder andere unnötige noch im Code habe, aber sei mir nicht böse, wenn ich's mir jetzt nicht mehr anschaue, keine Lust mehr heute.

Ich hatte das damals nur "auf die Schnelle" zusammengebaut und nicht mehr angefasst, als es lief, also nicht als Muster für eine gute Lösung ansehen. :P

Aber vielleicht reicht's ja, um Dir ein paar Ideen zu geben.
Mit Zitat antworten
  #5 (permalink)  
Alt 30.03.2008, 00:42
Benutzerbild von paracelsus
be simple
XHTMLforum-Kenner
Thread-Ersteller
 
Registriert seit: 16.07.2007
Ort: Kapfenberg - Austria, einige meinen am "Anus Mundi"
Beiträge: 4.788
paracelsus ist einfach richtig nettparacelsus ist einfach richtig nettparacelsus ist einfach richtig nettparacelsus ist einfach richtig nett
Standard

Oje, ich komm nicht klar damit.
Ich hab da warscheinlich den falschen Ansatz
PHP-Code:
$seite preg_replace('/href\s*\=\s*\"(\%LINK\%)([^\"]*)\"/'
$
str_replace " """, $);
$
str_replace "ö""oe", $);
$
str_replace "ä""ae", $);
$
str_replace "ü""ue", $);
$
str_replace "Ä""Ae", $);
$
str_replace "Ö""oe", $);
$
str_replace "Ü""Ue", $);,
$seite); 
kalppt ja nicht, gibt einen Fehler
Zitat:
unexpected T_LNUMBER, expecting T_VARIABLE or '$'
Ich will ja den Willkommen in willkommen umbauen und replacen.

Was ich bräuchte, und keine Ahnung hab wie ich es machen könnte:
eine Variable ($1 oder $2 geht ja nicht) die den namen 'Willkommen' enthält.
Eine weitere die %LINK% enthält.
So die erste wird umdesigned, und dient dann als Suchparameter (um aus den DB rauszufinden wo diese Seite verlinkt ist) um den richtigen url zusammenzustoppeln.
Das ganze muß dann wieder an den Platz zurück wo das erste steht?

Geändert von paracelsus (30.03.2008 um 00:45 Uhr)
Mit Zitat antworten
  #6 (permalink)  
Alt 30.03.2008, 01:14
Benutzerbild von Scheppertreiber
Chaot und Nonkonformist.
XHTMLforum-Kenner
 
Registriert seit: 13.03.2007
Ort: Steinmark im Spessart
Beiträge: 7.458
Scheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein Lichtblick
Standard

In C alles easy, in PHP ...

Genau habe ich das nicht verstanden. Einen String durch einen anderen zu
Ersetzen ist doch eigentlich kein Problem, einen String zu zerlegen auch nicht.
Nur Umlaute konvertieren ja auch nicht. Sprich !
__________________
Grüße aus dem Spessart, Joe

{ table-layout: biertischistbesser; }
Der Mausinator
Mit Zitat antworten
  #7 (permalink)  
Alt 30.03.2008, 01:18
Benutzerbild von paracelsus
be simple
XHTMLforum-Kenner
Thread-Ersteller
 
Registriert seit: 16.07.2007
Ort: Kapfenberg - Austria, einige meinen am "Anus Mundi"
Beiträge: 4.788
paracelsus ist einfach richtig nettparacelsus ist einfach richtig nettparacelsus ist einfach richtig nettparacelsus ist einfach richtig nett
Standard

Ich mache es gerade genauso, ist aber noch nicht fertig - prozedural
Mit Zitat antworten
  #8 (permalink)  
Alt 30.03.2008, 01:36
Benutzerbild von mantiz
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 25.02.2007
Beiträge: 2.843
mantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz sein
Standard

Deswegen mache ich es ja auch mit preg_match_all, die Funktion liefert mir ein Array mit allen String, die auf das Suchmuster passen. Dieses Array kann ich dann durchlaufen, mir zu dem gefundenen String den Ersatz-String bauen und dann jeweils ersetzen.
Mit Zitat antworten
  #9 (permalink)  
Alt 30.03.2008, 01:58
Benutzerbild von paracelsus
be simple
XHTMLforum-Kenner
Thread-Ersteller
 
Registriert seit: 16.07.2007
Ort: Kapfenberg - Austria, einige meinen am "Anus Mundi"
Beiträge: 4.788
paracelsus ist einfach richtig nettparacelsus ist einfach richtig nettparacelsus ist einfach richtig nettparacelsus ist einfach richtig nett
Standard

Mann, ich sitz schon seit Stunden dran.....
Also nochmal
Mit Zitat antworten
Sponsored Links
  #10 (permalink)  
Alt 30.03.2008, 03:16
Benutzerbild von hemfrie
Administrator
XHTMLforum-Kenner
 
Registriert seit: 18.12.2003
Ort: Düsseldorf
Beiträge: 2.777
hemfrie ist jedem bekannthemfrie ist jedem bekannthemfrie ist jedem bekannthemfrie ist jedem bekannthemfrie ist jedem bekannthemfrie ist jedem bekannt
Standard

Bin mir nicht sicher ob ich Dich 100% verstanden hab. Schau Dir mal mein kleines Test-Script an, vielleicht hilft es bei Deinem Problem weiter.

PHP-Code:
<?php
$seite 
='<a href="http://%LINK%Willkommen">bla</a> asdfsadsadfsadfasdf <a href="http://%LINK%Tschüss">blub</a>';

preg_match_all('/(\%LINK\%)([^"]*)/i'$seite$resultPREG_PATTERN_ORDER);
for (
$i 0$i count($result[0]); $i++) {
    
$part1 $result[1][$i]; //ergibt %LINK%
    
$part2 $result[2][$i]; //ergibt Willkommen, Tschüss, etc. 
    
    // Hier kannst Du die Backreferenz 2 nach belieben bearbeiten
    
$part2_output strtolower($part2);
    
    
// Ersetzen des Suchmusters
    
$seite preg_replace('/(\%LINK\%)'.$part2.'/i','neuer/pfad/'.$part2_output,$seite);
}

echo 
$seite;
?>
Mit Zitat antworten
Sponsored Links
Antwort

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Das leidige Thema IE ... Breite in DropDown Nav BreezeKeeper CSS 3 20.05.2010 11:30
Das bekannte, leidige Problem mit den Browsern.... Piet CSS 17 03.08.2007 16:48
Das leidige Theme zentrieren... Lockhead883 CSS 3 24.09.2006 19:03
Schriftarten... das leidige Thema? dr_colossos Offtopic 14 26.07.2005 10:56


Alle Zeitangaben in WEZ +2. Es ist jetzt 11:43 Uhr.