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 :: Версия для печати :: По разбивке предложения [3]
Форумы портала PHP.SU » PHP » Регулярные выражения » По разбивке предложения

Страниц (5): « 1 2 [3] 4 5 »
 

31. Строитель - 04 Апреля, 2017 - 12:50:03 - перейти к сообщению
bellagio пишет:
Не выходит. Все равно идет отображение первой картинки. остальные прописываются только текстово
А как выглядит ваше решение?
32. bellagio - 04 Апреля, 2017 - 12:54:06 - перейти к сообщению
так:
CODE (htmlphp):
скопировать код в буфер обмена
  1.     function parse_links_image($str) {
  2.         $result = false;
  3.         if (preg_match('~foto/(.+)=(.+)\+(.+)~iu', $str)) {
  4.             $pattern = '~foto/(.+)=(.+)\+(.+)~iu';
  5.             $result = '<div class="wp-caption aligncenter">'.
  6.                 '<img src="foto/$1" alt="$3" />'.
  7.                 '<div class="wp-caption-text">$2</div></div>';      
  8.          }
  9.          if (preg_match('~foto/(.+)=(.+)~iu', $str)) {
  10.             $pattern = '~foto/(.+)=(.+)~iu';
  11.             $result= '<div class="wp-caption aligncenter">'.
  12.                 '<img src="foto/$1" alt="$2" />'.
  13.                 '<div class="wp-caption-text">$2</div></div>';
  14.          }      
  15.          if (preg_match('~foto/(.+)', $str)) {
  16.             $pattern = '~foto/(.+)';
  17.             $result= '<div class="wp-caption aligncenter">'.
  18.                 '<img src="foto/$1" alt="" /></div>';        
  19.          }  
  20.      
  21.          return preg_replace($pattern, $result, $str);
  22.     }
33. Строитель - 04 Апреля, 2017 - 13:02:09 - перейти к сообщению
bellagio пишет:
так:
Не правильно. Попробуйте так
Спойлер (Отобразить)
34. bellagio - 04 Апреля, 2017 - 13:06:57 - перейти к сообщению
Не выходит, с точками на странице данные дублируются. Но что с ними, что без них, вариант - foto/123.png прописывается текстово. Эту строку почему-то не обрамляет
35. Строитель - 04 Апреля, 2017 - 13:10:09 - перейти к сообщению
bellagio пишет:
Не выходит, с точками на странице данные дублируются. Но что с ними, что без них, вариант - foto/123.png прописывается текстово. Эту строку почему-то не обрамляет
Значит надо пересмотреть вариант решения. Напомните, пожалуйста, условие вашей задачи.
36. bellagio - 04 Апреля, 2017 - 13:14:55 - перейти к сообщению
При создании новой записи в блоге, в редакторе tinymce автор оставляет текстовые строки и записи на картинки типа:
CODE (htmlphp):
скопировать код в буфер обмена
  1.     foto/123.png=а тут описание картинки+тут альт картинки
  2.     foto/123.png=а тут описание картинки
  3.     foto/123.png

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

Обрамление в примерах выше.

Кроме того, существует еще и видео ролики, которые тоже вставляются по ссылке. Но с ними нет проблем, ибо запись для поиска ссылки одна, и не изменяется.
37. Строитель - 04 Апреля, 2017 - 13:22:31 - перейти к сообщению
bellagio, похоже, что в текущей версии кода происходит перезапись ранее обработанных данных. Если это так, то я думаю, что надо убрать preg_replace(), и вместо неё подставлять найденные данные функцикей preg_match(), добавив к ней третий параметр, в который будут "складываться" найденные строки:

preg_match('~foto/(.+)=(.+)\+(.+)~iu', $str, $arr)

Если сами не справитесь, то дайте мне пример строки, которую вы подаёте на вход вашей функции - я набросаю пример кода на её основе.
38. bellagio - 04 Апреля, 2017 - 13:43:38 - перейти к сообщению
CODE (htmlphp):
скопировать код в буфер обмена
  1. function parse_links_image($str) {
  2.         $result = false;
  3.         $arr = array();
  4.     if (preg_match('~foto/(.+)=(.+)\+(.+)~iu', $str, $arr)) {
  5.         $pattern = '~foto/(.+)=(.+)\+(.+)~iu';
  6.         $replace = '<div class="wp-caption aligncenter">'.
  7.             '<img src="foto/$1" alt="$3" />'.
  8.             '<div class="wp-caption-text">$2</div></div>';
  9.         $result = preg_replace($pattern, $replace, $str);
  10.     }
  11.         if (preg_match('~foto/(.+)=(.+)~iu', $str, $arr)) {
  12.         $pattern = '~foto/(.+)=(.+)~iu';
  13.         $replace = '<div class="wp-caption aligncenter">'.
  14.             '<img src="foto/$1" alt="$2" />'.
  15.             <div class="wp-caption-text">$2</div></div>';
  16.         $result = preg_replace($pattern, $replace, $str);
  17.     }
  18.         if (preg_match('~foto/(.+)', $str, $arr)) {
  19.         $pattern = '~foto/(.+)';
  20.         $replace = '<p><img src="foto/$1" alt="" /></p>';
  21.         $result = preg_replace($pattern, $replace, $str);
  22.     }
  23.  
  24.     return $result;
  25. }
  26.  
  27. return parse_links_image($input);


Примеры строк все те же:
CODE (htmlphp):
скопировать код в буфер обмена
  1.         foto/1.png=картинка про лето+летний пейзаж
  2.         foto/2.png=картинка про лето
  3.         foto/3.png
39. Строитель - 04 Апреля, 2017 - 20:30:39 - перейти к сообщению
bellagio, пробуйте
Спойлер (Отобразить)
40. bellagio - 05 Апреля, 2017 - 05:51:20 - перейти к сообщению
Код отрабатывает для одного из первых попавшихся результатов. Но не для всех и сразу
41. Строитель - 05 Апреля, 2017 - 08:06:47 - перейти к сообщению
bellagio пишет:
Код отрабатывает для одного из первых попавшихся результатов. Но не для всех и сразу
Покажите, как вы передаете данные на вход.
42. bellagio - 05 Апреля, 2017 - 12:11:59 - перейти к сообщению
у меня идет переменная в шаблоне - [[parse_img? &input=`[[*content]]`]]

где, parse_img - это название нашего плагина, для обработки картинок. А сам [[*content]] - это стандартная переменная cms для вывода тех данных что введены в редакторе tinymce, иными словами сам текст статьи. В тексте статьи, мы вставляем ссылки:
CODE (html):
скопировать код в буфер обмена
  1.             foto/1.png=картинка про лето+летний пейзаж
  2.             foto/2.png=картинка про лето
  3.             foto/3.png

а плагин их должен распознать и оформить соответственно
43. Строитель - 05 Апреля, 2017 - 18:22:10 - перейти к сообщению
bellagio, т.е., фактически вы подаёте на вход такую строку?

PHP:
скопировать код в буфер обмена
  1. $input = 'foto/1.png=картинка про лето+летний пейзаж foto/2.png=картинка про лето foto/3.png';
  2.  
  3. echo parse_links_image($input);


Или нет?
44. bellagio - 05 Апреля, 2017 - 20:10:54 - перейти к сообщению
Строитель пишет:
bellagio, т.е., фактически вы подаёте на вход такую строку?

Да
45. Строитель - 05 Апреля, 2017 - 21:25:43 - перейти к сообщению
bellagio, это и нужно было указать в самом начале, когда я просил показать строку, передаваемую в вашу функцию. Пробуйте
Спойлер (Отобразить)

 

Powered by ExBB FM 1.0 RC1