2016-11-14 2 views
0

У меня все еще стоит серьезная проблема, о которой в предыдущем вопросе, к сожалению, не ответили. Я хочу сделать следующее:Храните переменную от preg_split и используйте ее в сочетании со словом

У меня есть сделанный на заказ cms, где я хочу использовать короткие коды для использования плагинов. Это работает так:

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

Что выводит это:

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 

Это работает хорошо, но то, что я хочу иметь определенный идентификатор из плагина, который я хочу позвонить с [plugin-blog 2]. Мне нужно сохранить номер плагина и использовать его позже внутри php-файла плагина, подобного этому SELECT * FROM 'plugin_db' WHERE 'id' = $value_from_shortcode

Как это сделать? Я совершенно не понимаю, как подойти к этой проблеме. Я пробовал буквально все, но либо цикл больше не работает, а число не сохраняется вместе с именем плагина. У меня есть следующий код:

$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

Вы столкнулись с последствиями очень плохого дизайна и следовали за анти-шаблонами и плохо понимали, как работает php. На самом деле это не проблема с preg_split, но, вероятно, с какой-то причиной вы используете двоичный оператор вместо логического? Что вы ожидали от '$ k & 1'? Сравните это с 1? В php вместо этого вы делаете '1 == $ k'. – baldrs

+0

Или это нечетная проверка номера? Поскольку каждое нечетное число имеет последний 1 в его двоичном представлении? – baldrs

+0

$ k & 1 - это единственная часть, которую я сам не писал, а разработчик в команде, который заставлял ее работать. Не уверен, что делает. Мое знание php является основным в этом вопросе :(Надеюсь, кто-то может мне помочь. – Saypontigohe

ответ

2

Вы можете получить идентификатор и имя с:

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); 
     } 
    } 

Примечание: держать тест $k & 1, чтобы иметь дело со всеми плагинами.

+0

Отлично! Это оно! Я много пробовал с preg_replace, но просто не нашел решения. Очень большое спасибо! – Saypontigohe

+0

@ Saypontigohe: Добро пожаловать, рад, что это помогает. – Toto

+0

Я попытался реализовать несколько коротких кодов сейчас, но это к сожалению не работает. Почему это может произойти? – Saypontigohe

1

Ваши переменные из родительской области должны быть доступны как глобальные переменные в вашем включаемого файла:

Дано: ниже test.php

<?php 

$foo = "test"; 

include('./b.php'); 

И это b.php:

<?php echo $foo; 

Запуск test.php выведет на экран test

Так что в вашем случае $k и $v будут доступны в файле, который вы включаете, так что вы можете сделать что-то так:

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

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

И, пожалуйста, рассмотреть вопрос обучения PHP и передового опыта.

+0

Я использую это уже, но моя главная проблема состоит в том, чтобы выделить отдельный элемент из строки (прямо сейчас он выводит include_once ('plugins/blog 2/blog 2.php'), которые, конечно, не могут быть найдены). И даже если я разделяю идентификатор, он все равно должен знать, что он является частью имени плагина.Я занят обучением с PHP, но на этом месте пусто. – Saypontigohe

 Смежные вопросы

  • Нет связанных вопросов^_^