2016-11-14 5 views
0

Ich bin immer noch vor einem großen Problem, das in einer früheren Frage wurde leider nicht beantwortet. Ich möchte Folgendes tun:Speichern Variable von preg_split, und verwenden Sie es mit dem Wort

Ich habe eine benutzerdefinierte cms, wo ich shortcodes Plugins verwenden möchten. Es wird wie folgt arbeiten:

this is a text 
[plugin-blog] 
this is more text 
and some more 
[plugin-contact] 

Was es gibt, ist dies:

this is a text 
include_once('plugins/blog/blog.php'); <- loads specific file for plugin 
this is more text 
and some more 
include_once('plugins/contact/contact.php'); <- loads specific file for plugin 

Dies funktioniert gut, aber was ich will, ist eine spezifische ID des Plugins zu haben, die ich anrufen möchten mit [plugin-blog 2]. Ich muss die Nummer des Plugins speichern und später in der PHP-Datei des Plugins verwenden. SELECT * FROM 'plugin_db' WHERE 'id' = $value_from_shortcode

Wie kann ich das tun? Ich weiß nicht, wie ich dieses Problem angehen soll. Ich habe wörtlich alles ausprobiert, aber entweder funktioniert die Schleife nicht mehr, die Nummer wird nicht mit der Eingabe des Plugin-Namens gespeichert. Ich habe den folgenden Code:

$regex = '~\[plugin-([^]]+)]~'; 
     $content_one = htmlspecialchars_decode($page['content_one']); 
     $parts = preg_split($regex, $content_one, -1, PREG_SPLIT_DELIM_CAPTURE); 

     foreach($parts as $k => $v){ 
      if($k & 1) 
       include_once('plugins/'.$v.'/'.$v.'.php'); 
      else 
       echo htmlspecialchars_decode($v); 
     } 
+0

Sie stehen vor den Folgen eines sehr schlechten Designs und der folgenden Anti-Patterns und einem schlechten Verständnis dafür, wie php wirklich funktioniert. Dies ist eigentlich kein Problem mit preg_split, aber wahrscheinlich mit einem binären Operator anstelle von Boolean aus irgendeinem Grund? Was hast du von '$ k & 1' erwartet? Vergleiche es mit 1? In PHP tust du stattdessen '1 == $ k'. – baldrs

+0

Oder ist das eine ungerade Zahl? Wie hat jede ungerade Zahl die letzte 1 in ihrer binären Darstellung? – baldrs

+0

Der $ k & 1 ist der einzige Teil, den ich nicht selbst geschrieben habe, sondern ein Entwickler im Team, der es zum Laufen gebracht hat. Nicht sicher, was ist. Mein Wissen über PHP ist irgendwie grundlegend in dieser Sache :(Ich hoffe, jemand kann mir helfen. – Saypontigohe

Antwort

2

Sie können die ID und den Namen mit abrufen:

foreach($parts as $k => $v){ 
     if($k & 1) { 
      $id = preg_replace('/\D+/', '', $v); 
      $v = preg_replace('/\d+/', '', $v); 
      echo "id = $id\n"; 
      include ('plugins/'.$v.'/'.$v.'.php'); 
     } else { 
      echo htmlspecialchars_decode($v); 
     } 
    } 

Hinweis: den Test halten $k & 1 mit allen Plugins zu beschäftigen.

+0

Perfekt! Das ist es! Ich habe viel mit preg_replace probiert, aber ich habe einfach keine Lösung gefunden. Sehr vielen Dank! – Saypontigohe

+0

@Saypontigoehe: Gern geschehen, froh, dass es hilft. – Toto

+0

Ich habe versucht, jetzt mehrere Shortcodes zu implementieren, aber das funktioniert leider nicht. Warum kann das passieren? – Saypontigohe

1

Ihre Variablen aus übergeordneten Bereich sollte als globale Variablen in der Datei enthalten verfügbar sein:

Gegeben: unter test.php ist

<?php 

$foo = "test"; 

include('./b.php'); 

Und das ist b.php:

<?php echo $foo; 

Lauf test.php ausgeben wird test

So in Ihrem Fall $k und $v werden in der Datei zur Verfügung, die Sie enthalten, so dass Sie gleich etwas tun können:

if (1 == $k) { 
    $id = $v; 

    include_once('plugins/'.$v.'/'.$v.'.php'); 
} 

Und bitte die PHP und Best Practices zu lernen.

+0

Ich benutze dies bereits, aber mein Hauptproblem ist es, die ID von der Zeichenfolge getrennt zu haben (im Moment gibt es include_once ('plugins/blog 2/blog 2.php') was natürlich nicht gefunden werden kann). Und selbst wenn ich die ID getrennt habe, muss sie immer noch wissen, dass sie Teil des Plugin-Namens ist.Ich bin beschäftigt mit PHP zu lernen, aber bin leer an diesem Ort insbesondere – Saypontigohe

Verwandte Themen