Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP
Войти
Регистрация
Восстановить пароль
 
kilnart
3 / 3 / 1
Регистрация: 31.07.2011
Сообщений: 91
#1

Добавить модуль после определенного тега - PHP

22.12.2017, 16:50. Просмотров 149. Ответов 10

Нашел вот такой код. Он вставляет <div></div> после заданного мною количества абзацев.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?PHP
function addContent($addTo, $add, $cntRep, $after = '</p>', $openTag = '<div align="center">', $closeTag = '</div>')
    {
       $posAfter = 0;
       for ($i=0; $i < $cntRep; $i++) {
           $pos = stripos($addTo, $after, $posAfter);
           $posAfter = $pos+strlen($after);
           if($pos===FALSE) {
              return $addTo;
           }
       }
       $beforeAdding = substr($addTo, 0, $posAfter);
       $afterAdding = substr($addTo, $posAfter);
       $result = $beforeAdding . $openTag . $add . $closeTag . $afterAdding;
       return $result;
    }
$this->item->fulltext = addContent($this->item->fulltext,'<div>любой код</div>',5);
echo $this->item->fulltext;
?>
В моем случае хочу добавить модуль 1, после каждого H2 и модуль 2, после каждого Н3 встречающегося в $this->item->fulltext. Как это сделать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.12.2017, 16:50
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Добавить модуль после определенного тега (PHP):

Как в цикле ForEach после каждого второго прохода добавить какое-то действие
как в цикле после каждого второго прохода добавить какое то действие. например,...

Вернуть ошибку после определенного времени
Есть аякс-скрипт, нужно чтобы скрипт прекращал работу и возвращал ошибку...

Если элемент массива больше А, то добавить перед элементом число А, иначе добавить после элемента число Б
Дан целочисленный массив и два числа А и Б. Если элемент массива больше А то...

Вставка переменной после определенного текстового абзаца
Добрый вечер. Есть переменная которая выводит текст: &lt;p&gt;текст с html&lt;/p&gt;...

Ошибки удаления строки после определенного знака
Доброго времени суток. Суть такова. Имею кучу строк в файле где в перемешку с...

Добавить символ после названия категории
Добрый вечер, я сам по себе верстальщик, с программирование знаком плохо,...

10
ytf
199 / 212 / 174
Регистрация: 15.08.2017
Сообщений: 1,183
22.12.2017, 18:11 #2
PHP
1
2
3
4
$e = explode("</h3>",$this->item->fulltext);
if (count($e)>1) { // если нашёлся h3
$this->item->fulltext = implode("</h3>{loadmodule custom,Schema Organization DE}",$e);
}
0
kilnart
3 / 3 / 1
Регистрация: 31.07.2011
Сообщений: 91
22.12.2017, 19:44  [ТС] #3
Спасибо за вариант. И все же, выводит текст в нужных местах, но не модуль.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$h2 = explode("</h2>",$this->item->fulltext);
if (count($h2)>1) { // если нашёлся h2
$this->item->fulltext = implode("</h2>{loadmodule custom,Schema Organization DE}",$h2);
}          
          
$h3 = explode("</h3>",$this->item->fulltext);
if (count($h3)>1) { // если нашёлся h3
$this->item->fulltext = implode("</h3>{loadmodule custom,Schema Organization DE}",$h3);
}
 
echo $this->item->fulltext;
?>
0
ytf
199 / 212 / 174
Регистрация: 15.08.2017
Сообщений: 1,183
22.12.2017, 20:09 #4
если сделаете поиск по движку жумла, по слову
Код
{loadmodule
можно попробовать найти код, который заменяет текстовую вставку
0
kilnart
3 / 3 / 1
Регистрация: 31.07.2011
Сообщений: 91
22.12.2017, 20:14  [ТС] #5
в других местах шаблона у меня стоит

PHP
1
<?php echo $renderer->render('moduleitemend', $options, null); ?>
этот код создает позицию под модуль, которой в дальнейшем могу управлять.

Но, как я понимаю, эту строку нужно писать как код, в примере с implode, строка пишется как обычный текст.
0
ytf
199 / 212 / 174
Регистрация: 15.08.2017
Сообщений: 1,183
22.12.2017, 21:06 #6
https://stackoverflow.com/questions/...another-module - здесь пишут о возможных двух вариантах:

Код
{loadposition myPosition}
или
Код
{loadmodule myModuleTypesName}
0
kilnart
3 / 3 / 1
Регистрация: 31.07.2011
Сообщений: 91
22.12.2017, 21:07  [ТС] #7
эти варианты используются при редактировании статьи через админку.
0
ytf
199 / 212 / 174
Регистрация: 15.08.2017
Сообщений: 1,183
22.12.2017, 21:08 #8
Цитата Сообщение от kilnart Посмотреть сообщение
в примере с implode, строка пишется как обычный текст
PHP
1
implode("</h3>".$renderer->render('moduleitemend', $options, null),$h3)
0
kilnart
3 / 3 / 1
Регистрация: 31.07.2011
Сообщений: 91
22.12.2017, 21:09  [ТС] #9
такой вариант ошибку выдает.
0
ytf
199 / 212 / 174
Регистрация: 15.08.2017
Сообщений: 1,183
23.12.2017, 11:19 #10
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
jimport('joomla.application.module.helper');
$h2 = explode("</h2>",$this->item->fulltext);
while (count($h2)>1) { // если нашёлся h2
$a=array_shift($h2);
$module = getModuleById(123); // the ID of the module (123) we can see in the backend: Extensions - Modules
$module->params = "param1=john\n\rparam2=doe"; // delimited by "\n\r"
$html=JModuleHelper::renderModule($module);
reset($h2);
$h2[key($h2)]=$a."</h2>".$html.$h2[key($h2)];
}
$this->item->fulltext = reset($h2);
 
$h2 = explode("</h3>",$this->item->fulltext);
while (count($h2)>1) { // если нашёлся h2
$a=array_shift($h2);
$module = getModuleById(123); // the ID of the module (123) we can see in the backend: Extensions - Modules
$module->params = "param1=john\n\rparam2=doe"; // delimited by "\n\r"
$html=JModuleHelper::renderModule($module);
reset($h2);
$h2[key($h2)]=$a."</h3>".$html.$h2[key($h2)];
}
$this->item->fulltext = reset($h2);
 
echo $this->item->fulltext;
?>
0
kilnart
3 / 3 / 1
Регистрация: 31.07.2011
Сообщений: 91
23.12.2017, 16:11  [ТС] #11
ругается на getModuleById (прописал свой id) 0 - Call to undefined function getModuleById()

http://prntscr.com/hrcxvp

Добавлено через 1 час 19 минут
Пока остановился на этом варианте. Участвует H2, H3 решил пока не трогать.


PHP
1
2
3
4
5
6
7
8
9
10
11
12
<?php
 
          
$ads=' код рекламы ';
          
$h2 = explode("</h2>",$this->item->fulltext);
if (count($h2)>1) { // если нашёлся h2
$this->item->fulltext=preg_replace('#<h2(.*?)</h2>#','<h2\1</h2><div class="adv">'.$ads.'</div>',$this->item->fulltext);
}          
 
echo $this->item->fulltext;
?>
0
23.12.2017, 16:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.12.2017, 16:11
Привет! Вот еще темы с решениями:

Добавить на форму заголовок после redirect'a
Добрый день, Уважаемые форумчане! Подскажите, как добавить заголовок на форму в...

Как добавить пробелы после каждого символа
Есть набор цифр, что-то типа 11060569168068269807943360910741. Необходимо...

Вывод определенного тега <img> из таблицы БД
Добрый день, Форумчане Есть блог, куда пользователи вносят данные. Можно ли...

Как добавить элемент до и после тега?
Всем привет. Вот есть HTML: &lt;form name=&quot;formname&quot; action=&quot;index.php&quot;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru