Как делать вывод чего-то по метке указанной в тексе

MAD-BOYT

Постоялец
Регистрация
22 Ноя 2007
Сообщения
78
Реакции
8
Сори, что тема с таким названием, не могу правильно сформулировать...

В общем в чем суть
Добавляю новость. в тексте новости указываю, например {block_menu}
далее уже в php коде как лучше отлавливать при выводе эту метку?
Т.е. во время вывода новости на сайте находить в тексте {block_menu}, получать значение между скобок block_menu и его уже использовать для вывода того, что мне нужно.

Подскажите пожалуйста, как можно такое реализовать?
 
PHP:
 $text =  ' asdasd as asdas {block_menu1}  xzxczxc z <b>{block_menu2}</b> zczxczxczxc'; 
 $data = array('block_menu1'=> 'data1', 'block_menu2'=> 'data2' );
 
  foreach ($data as $k=>$v)
    $text = str_replace('{'.$k.'}',$v,$text);
 
  echo $text;


ну или еще можно как-то так .. ( другой способ )

PHP:
// file index.php   
function tpl($_tpl_,$v=array())
{
  extract($v,EXTR_SKIP);
  ob_start();
  include($_tpl_);
  return ob_get_clean();
}           

echo tpl('xxx.txt', array('block_menu1'=>'data1', 'block_menu2'=>'data2',));

Код:
// file xxx.txt
<h1><?php echo $block_menu1?></h1>
<div><?php echo $block_menu2?></div>

а вообще то что вы делаете называется шаблонизатором ... в гугле по запросу "php шаблонизатор" можно много интересного найти
 
Спасибо!

А если без массива?

К примеру закину какой-то файл, а теле новости просто метку {menu}
и если это {menu} есть, то делаю инклуд menu.php, или из БД что-то вытягиваю..., а если {menu} нет, то просто {menu} и показывать в тексте.
 
PHP:
 $text =  ' asdasd as asdas {menu}  xzxczxc z <b>{block_menu2}</b> zczxczxczxc';
 if(strpos($text, '{menu}') !== false)
 {
     
     include 'menu.php';     // подключаем     
     $menuData = $bd->getDataFromMenu();// или достаем с  БД данные      
     $text = str_replace('{menu}',$menuData,$text);      
 }
echo $text;
 
а если не известно название метки?
Т.е. если в скрипте не определять вообще метки. только получать то, что между скобками и уже с ним работать.
 
PHP:
 $text =  ' asdasd as asdas {menu}  xzxczxc z <b>{block_menu2}</b> zczxczxczxc'; 
 preg_match_all('/{([^}]*)}/is', $text, $result); 
 
 if(count($result[1])) 
    foreach($result[1] as $r) 
    if($r == 'menu'){
         include 'menu.php';     // подключаем     
         $menuData = $bd->getDataFromMenu();// или достаем с  БД данные               
         $text = str_replace('{menu}',$menuData, $text);      
    }elseif($r == 'block_menu2')
    {
        // действия для block_menu2
    }
    
echo $text;
 
chang, спасибо за помощь!
Спасибо кнопкой.

А вообще по твоим вопросам используй следующие ключевые фразы для поиска что по форуму что по гуглу:
1) preg_match() и preg_match_all --- поиск в строке по регулярному выражению
2) preg_replace() --- замена по регулярному выражению
3) str_replace --- замена в строке подстроку.

и будет тебе счастье.
 
Для начала сформулируй по пунктам чего хочешь, что должно быть,
что нужно получить на выходе и т.д.
т.к. без этого ты будешь метаться в разные стороны.

копай информацию по теме php шаблоны, шаблонизаторы это если хочешь что то более менее серьёзное сделать и автоматизировать процесс

для простой вставки а шаблон достаточно использовать несколько фунций.
 
Сформулировал вроде нормально
Суть
Вставить в текст при добавлении новости какой-то тег {menu} или {any_block}
далее при обработки этого текста на выдачу, смотреть, если там есть что-то в фигурных скобках, то получать, например menu и уже потом что-то с menu делать.

например попробовать найти какой-то файл и заинклудить его из папки(если он есть) или например попробовать в БД поискать в определенной таблице это самое menu... главное было понять как делать, а как использовать дальше я придумаю.

фактически заведомо не известно то, что будет в скобках.
 
Назад
Сверху