Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Не работает функция замены текста
Форумы портала PHP.SU » » Если скрипт не работает » Не работает функция замены текста

Страниц (1): [1]
 

1. headstik - 24 Декабря, 2011 - 15:50:44 - перейти к сообщению
Имеется исходный код на html:
<jdoc:include type="modules" name="left" style="rounded" />
который отвечает за отображение меню на сайте.

Преследуется цель заменить определенный участок кода результата данного выражения. Пишу следующее:
<?php
$a='<jdoc:include type="modules" name="left" style="rounded" />';
$b="Новые фото"; // искомый текст
$c="New photo"; // вставляемый текст
function foo($d) {
echo $d;
}
str_replace($b,$c,foo($a)); // здесь заменяем текст
?>

Результат - ноль. Все выводится как и прежде. В чем может быть ошибка?
2. Мелкий - 24 Декабря, 2011 - 16:00:54 - перейти к сообщению
Код бессмыслен и беспощаден.

0) ваша функция foo ничего не возвращает -> str_replace оперирует null'ом. После приведения типов - пустая строка.
1) str_replace изменённую строку возвращает. А не изменяет переданную.
2) в любом случае в $a не содержится $b.
3) На правах пророка - используется какой-то шаблонизатор, т.к. html-ом представленный фрагмент так же не является.
3. headstik - 24 Декабря, 2011 - 22:24:45 - перейти к сообщению
Мелкий пишет:
Код бессмыслен и беспощаден.

0) ваша функция foo ничего не возвращает -> str_replace оперирует null'ом. После приведения типов - пустая строка.
1) str_replace изменённую строку возвращает. А не изменяет переданную.
2) в любом случае в $a не содержится $b.
3) На правах пророка - используется какой-то шаблонизатор, т.к. html-ом представленный фрагмент так же не является.


Хотелось бы возразить по некоторым пунктам на следующих основаниях:
0) вышеуказанный код хотя и не заменяет необходимый текст, но меню выводит, а при заключении строки str_replace($b,$c,foo($a)); в комменты меню вообще не выводится;
1) так мне и нужна измененная строка;
2) результат вывода строки <jdoc:include type="modules" name="left" style="rounded" /> следующий:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <div class="module_menu">
  3.                         <div>
  4.                                 <div>
  5.                                         <div>
  6.                                                                                                         <h3>Главное меню</h3>
  7.                                                                                         <ul class="menu"><li id="current" class="active item1"><a href="http://mirdevushek.ru/"><span>Главная</span></a></li><li class="item3"><a href="/novye-foto.html"><span>Новые фото</span></a></li><li class="item2"><a href="/luchshie-foto.html"><span>Лучшие фото</span></a></li><li class="item5"><a href="/populjarnye-foto.html"><span>Популярные фото</span></a></li></ul>                                        </div>
  8.  
  9.                                 </div>
  10.                         </div>
  11.                 </div>
  12.  

и в функцию str_replace подставляется именно это значение (я так думаю Улыбка );
3) именно, это и есть шаблон сайта. Разве это что-то меняет?
4. snikers987 - 25 Декабря, 2011 - 02:14:43 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $sString='<jdoc:include type="modules" name="left" style="rounded" />';
  4. $sPattern = "Новые фото"; // искомый текст
  5. $sReplacement = "New photo"; // вставляемый текст
  6. function foo($d) {
  7.     return $d;
  8. }
  9. echo str_replace($sPattern,$sReplacement,foo($sString)); // здесь заменяем текст
  10.  


Как то так.
5. Мелкий - 25 Декабря, 2011 - 08:28:36 - перейти к сообщению
headstik,
0) вывод осуществляется в функции foo. А str_replace оперирует пустотой.
1) так почему вы ничего не делаете с результатом? Не сохраняете в переменную, не выводите?
2) нет, не это. А то, что возвращается из foo($a). Т.е. NULL, т.к. фунция ничего не возвращает.
3) это принципиальное различие. Вам нужно разобраться, на каком этапе вызывается шаблонизатор, чтобы оперировать не управляющей конструкцией, а результирующим HTML.
6. headstik - 25 Декабря, 2011 - 15:06:48 - перейти к сообщению
snikers987
текст не заменяется, хотя меню по прежнему выводится, а при комментировании строки №9 меню пропадает.
Выходит как говорит Мелкий - результирующий html не выводится. Огорчение
Но ведь должен же быть какой-то выход.
7. Slesher - 25 Декабря, 2011 - 16:05:17 - перейти к сообщению
headstik, ищите этап на котором <jdoc:include type="modules" name="left" style="rounded" /> преобразовывается в результируемый хтмл, и уже когда вы получаете в переменную вот этот код
CODE (htmlphp):
скопировать код в буфер обмена
  1. <div class="module_menu">
  2.  
  3.                         <div>
  4.  
  5.                                 <div>
  6.  
  7.                                         <div>
  8.  
  9.                                                                                                         <h3>Главное меню</h3>
  10.  
  11.                                                                                         <ul class="menu"><li id="current" class="active item1"><a href="http://mirdevushek.ru/"><span>Главная</span></a></li><li class="item3"><a href="/novye-foto.html"><span>Новые фото</span></a></li><li class="item2"><a href="/luchshie-foto.html"><span>Лучшие фото</span></a></li><li class="item5"><a href="/populjarnye-foto.html"><span>Популярные фото</span></a></li></ul>                                        </div>
  12.  
  13.  
  14.  
  15.                                 </div>
  16.  
  17.                         </div>
  18.  
  19.                 </div>

тогда уже можете использовать код snikers987а.
8. headstik - 25 Декабря, 2011 - 20:33:02 - перейти к сообщению
Slesher пишет:
headstik, ищите этап на котором <jdoc:include type="modules" name="left" style="rounded" /> преобразовывается в результируемый хтмл, и уже когда вы получаете в переменную вот этот код


Если бы мне это было по плечу, я бы сюда не лез с такими вопросами. Может создать отдельный файл с данным кодом и вызвать его внутри функции или присвоить переменной (если такое возможно конечно)?
9. Slesher - 25 Декабря, 2011 - 20:41:28 - перейти к сообщению
headstik пишет:
Может создать отдельный файл с данным кодом


ну оно то можно, только я сомневаюсь что на выходе решение будет такое как вам нужно...
ведь сам кусок с шаблоном размещен где-то в файле шаблона, а если вы его вынесете, неизвестно что там еще где заменяется и подставляется.
10. headstik - 25 Декабря, 2011 - 20:59:12 - перейти к сообщению
Хорошо. А откуда в Joomla 1.5 может вызываться шаблон?
11. headstik - 03 Января, 2012 - 13:51:23 - перейти к сообщению
А можно результат функции echo присвоить переменной?
12. Саныч - 03 Января, 2012 - 13:55:32 - перейти к сообщению
headstik пишет:
А можно результат функции echo присвоить переменной?
Ну во-первых echo это не функция. Во-вторых echo ничего не возвращает.
13. headstik - 03 Января, 2012 - 20:50:54 - перейти к сообщению
Неужели нет способа извлечь результат работы кода
CODE (htmlphp):
скопировать код в буфер обмена
  1. <jdoc:include type="modules" name="left" style="rounded" />
и присвоить его переменной. Если не затруднит дайте пожалуйста направление каким образом это можно сделать.

 

Powered by ExBB FM 1.0 RC1