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

Тема в разделе "PHP", создана пользователем MAD-BOYT, 29 июл 2011.

Модераторы: latteo
  1. MAD-BOYT

    MAD-BOYT Постоялец

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

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

    Подскажите пожалуйста, как можно такое реализовать?
     
  2. chang

    chang

    Регистр.:
    20 ноя 2009
    Сообщения:
    364
    Симпатии:
    117
    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 шаблонизатор" можно много интересного найти
     
  3. MAD-BOYT

    MAD-BOYT Постоялец

    Регистр.:
    22 ноя 2007
    Сообщения:
    75
    Симпатии:
    8
    Спасибо!

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

    К примеру закину какой-то файл, а теле новости просто метку {menu}
    и если это {menu} есть, то делаю инклуд menu.php, или из БД что-то вытягиваю..., а если {menu} нет, то просто {menu} и показывать в тексте.
     
  4. chang

    chang

    Регистр.:
    20 ноя 2009
    Сообщения:
    364
    Симпатии:
    117
    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;   
      
     
  5. MAD-BOYT

    MAD-BOYT Постоялец

    Регистр.:
    22 ноя 2007
    Сообщения:
    75
    Симпатии:
    8
    а если не известно название метки?
    Т.е. если в скрипте не определять вообще метки. только получать то, что между скобками и уже с ним работать.
     
  6. chang

    chang

    Регистр.:
    20 ноя 2009
    Сообщения:
    364
    Симпатии:
    117
    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;
     
    MAD-BOYT нравится это.
  7. trooll

    trooll PHP кодер

    Регистр.:
    22 дек 2008
    Сообщения:
    503
    Симпатии:
    116
    Спасибо кнопкой.

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

    и будет тебе счастье.
     
  8. satyra

    satyra Постоялец

    Регистр.:
    21 окт 2007
    Сообщения:
    73
    Симпатии:
    7
    Для начала сформулируй по пунктам чего хочешь, что должно быть,
    что нужно получить на выходе и т.д.
    т.к. без этого ты будешь метаться в разные стороны.

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

    для простой вставки а шаблон достаточно использовать несколько фунций.
     
  9. MAD-BOYT

    MAD-BOYT Постоялец

    Регистр.:
    22 ноя 2007
    Сообщения:
    75
    Симпатии:
    8
    Сформулировал вроде нормально
    Суть
    Вставить в текст при добавлении новости какой-то тег {menu} или {any_block}
    далее при обработки этого текста на выдачу, смотреть, если там есть что-то в фигурных скобках, то получать, например menu и уже потом что-то с menu делать.

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

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