вставка html кода в текст средствами php (replace)

Discussion in 'PHP' started by ufaclub, 16 Oct 2011.

  1. ufaclub

    ufaclub New Member

    Joined:
    13 Jul 2010
    Messages:
    204
    Likes Received:
    0
    Reputations:
    0
    есть текст - находиться в <div id="txt"> </div>
    в этом диве допустим есть 5 контейнеров <p>

    т.е

    PHP:

    <div id="txt"

    <
    p>.......</p>
    <
    p>.......</p>
    <
    p>.......</p>
    <
    p>.......</p>
    <
    p>.......</p>
    <
    p>.......</p>

    </
    div>







    возможно ли средствами PHP реализовать вставку html кода из переменой $adv после n-го числа тега </p>



    PHP:

    <div id="txt"> 

    <p>.......</p>
    <p>.......</p>

    <?php echo $adv ;?>

    <p>.......</p>
    <p>.......</p>
    <p>.......</p>
    <p>.......</p>

    </div>






     
  2. mr.The

    mr.The Elder - Старейшина

    Joined:
    30 Apr 2007
    Messages:
    1,080
    Likes Received:
    456
    Reputations:
    38
    Самое простое, это с использованием implode\explode.
     
  3. ufaclub

    ufaclub New Member

    Joined:
    13 Jul 2010
    Messages:
    204
    Likes Received:
    0
    Reputations:
    0

    почем поможеш? :)
     
  4. Osstudio

    Osstudio Banned

    Joined:
    17 Apr 2011
    Messages:
    638
    Likes Received:
    160
    Reputations:
    81
    Хм.. как ты этими функциями реализуешь вставку переменной после n раза тега </p> ?? :D
     
  5. severa

    severa Banned

    Joined:
    11 May 2011
    Messages:
    33
    Likes Received:
    49
    Reputations:
    0
    $text="<div id=\"txt\">

    <p>.......</p>
    <p>.......</p>
    <p>.......</p>
    <p>.......</p>
    <p>.......</p>
    <p>.......</p>

    </div> ";

    $mas=explode("\n",$text);

    $k=0;
    $rez_text="";
    $N=?;

    foreach($mas as $string)
    {
    if (strpos("<p>",$string)) $k++;
    $rez_text.=$string;
    if ($k==$N) $rez_text.="<?php echo $adv ;?> \n";
    }
     
    #5 severa, 16 Oct 2011
    Last edited: 17 Oct 2011
  6. Melfis

    Melfis Elder - Старейшина

    Joined:
    25 Apr 2011
    Messages:
    505
    Likes Received:
    105
    Reputations:
    53
    PHP:
    $text "<div><p>1</p><p>2</p><p>3</p></div>";
    $adv "<div></div>";
    echo 
    preg_replace('/(<p>.*?<\/p>){2}/ms'"$0$adv"$text);
    Где {2} - после какого <p></p> вставлять
     
  7. mr.The

    mr.The Elder - Старейшина

    Joined:
    30 Apr 2007
    Messages:
    1,080
    Likes Received:
    456
    Reputations:
    38
    легко. выше уже реализовали, хоть и кривовато. не вижу проблемы вообще.
     
  8. ufaclub

    ufaclub New Member

    Joined:
    13 Jul 2010
    Messages:
    204
    Likes Received:
    0
    Reputations:
    0

    речь идет о Joomla 1.5

    в шаблоне вывод контента осуществляет вставка

    <jdoc:include type="component" />

    Например частный случай : эта вставка дает код:

    PHP:

    <div id="page">



    <
    h2 class="contentheading">
        
    Печать на баннерной ткани</h2>








    <
    p>Широкоформатная печать один из основных способов изготовления наружной рекламыОбласть применения данного вида печати очень широкот изготовления плакатов до огромных рекламных поверхностей.</p>
    <
    p>Условно широкоформатную печать можно разделить на 2 категории по области применениядля наружной рекламы и интерьерная печатьВ первом случае она применяется для производства носителей для наружной рекламыВо втором случае область применения ее значительно ширеЭто разнообразные рекламные носителиинтерьерные плакатымобильные стендыпостеры и т.д.</p>
    <
    p>Сроки  эксплуатации широкоформатной печати  в наружной рекламе ограничены до 2х -4 лет с ламинациейНапротив при использовании в интерьересрок службы многократно увеличиваетсядоходит до 10-15 летЭто обусловлено темчто на улице рекламные материалы такого типа подвержены внешним воздействиям ультрафиолетатемпературным колебаниям и агрессивным средамчто приводит к их обесцвечиванию и разрушению.</p>
    <
    p>Рекламно-производственная компания готова предоставить Вам различные вариантыот самых недорогих до решений класса lux.</p>
    <
    p>В зависимости от целей рекламной компаниинаши менеджеры предложат Вам печать на различных видах материаловбумагесамоклеющейся пленкебаннерном полотнесетке с необходимым для Вас качеством (разрешением).</p>


    </
    div>




    в шаблоне я сделал так.

    PHP:


    <?php 
    $text
    =' <jdoc:include type="component" />';
    $ref='реклама';
    $a=explode('</p>',$text);
    $a[3]=$ref.$a[3];
    echo 
    $text=implode('</p>',$a);
    ?>    
            




    в итоге получил:

    PHP:


             
    <div id="page">



    <
    h2 class="contentheading">
        
    Печать на баннерной ткани</h2>








    <
    p>Широкоформатная печать один из основных способов изготовления наружной рекламыОбласть применения данного вида печати очень широкот изготовления плакатов до огромных рекламных поверхностей.</p>
    <
    p>Условно широкоформатную печать можно разделить на 2 категории по области применениядля наружной рекламы и интерьерная печатьВ первом случае она применяется для производства носителей для наружной рекламыВо втором случае область применения ее значительно ширеЭто разнообразные рекламные носителиинтерьерные плакатымобильные стендыпостеры и т.д.</p>
    <
    p>Сроки  эксплуатации широкоформатной печати  в наружной рекламе ограничены до 2х -4 лет с ламинациейНапротив при использовании в интерьересрок службы многократно увеличиваетсядоходит до 10-15 летЭто обусловлено темчто на улице рекламные материалы такого типа подвержены внешним воздействиям ультрафиолетатемпературным колебаниям и агрессивным средамчто приводит к их обесцвечиванию и разрушению.</p>
    <
    p>Рекламно-производственная компания готова предоставить Вам различные вариантыот самых недорогих до решений класса lux.</p>
    <
    p>В зависимости от целей рекламной компаниинаши менеджеры предложат Вам печать на различных видах материаловбумагесамоклеющейся пленкебаннерном полотнесетке с необходимым для Вас качеством (разрешением).</p>


    </
    div>
    </
    p>реклама    



    т.е </p>реклама вывелось вообще тупо в конце - а не после 3го </p>


    если значение $text задать самомум - то да все срабатывает - а так вот нет :rolleyes:
     
    #8 ufaclub, 17 Oct 2011
    Last edited: 17 Oct 2011
  9. Чакэ

    Чакэ Elder - Старейшина

    Joined:
    15 Aug 2010
    Messages:
    260
    Likes Received:
    66
    Reputations:
    62
    обычно такая задача решается при написании очередного костыля. посему может лучше пересмотреть логику поги?
     
  10. ufaclub

    ufaclub New Member

    Joined:
    13 Jul 2010
    Messages:
    204
    Likes Received:
    0
    Reputations:
    0
    причем тут костыль? Просто есть цель сделать иммено так, причем не спроста, лутше бы по теме кто что подсказал.
     
  11. Melfis

    Melfis Elder - Старейшина

    Joined:
    25 Apr 2011
    Messages:
    505
    Likes Received:
    105
    Reputations:
    53
    Тебе не судьба что ли поправить компонент и не придумывать лишнего? Во view этого компонента наверняка циклом вставляются <p></p>. Вот и передай из контроллера во вью нужное тебе значение рекламного блока и в цикле поставь условие, когда нужно выводить его.