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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: По разбивке предложения [3]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Строитель Модератор
Отправлено: 04 Апреля, 2017 - 12:50:03
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




bellagio пишет:
Не выходит. Все равно идет отображение первой картинки. остальные прописываются только текстово
А как выглядит ваше решение?
 
 Top
bellagio
Отправлено: 04 Апреля, 2017 - 12:54:06
Post Id


Новичок


Покинул форум
Сообщений всего: 37
Дата рег-ции: Апр. 2017  


Помог: 0 раз(а)




так:
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.     }

(Отредактировано автором: 04 Апреля, 2017 - 12:54:41)

 
 Top
Строитель Модератор
Отправлено: 04 Апреля, 2017 - 13:02:09
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




bellagio пишет:
так:
Не правильно. Попробуйте так
Спойлер (Отобразить)
 
 Top
bellagio
Отправлено: 04 Апреля, 2017 - 13:06:57
Post Id


Новичок


Покинул форум
Сообщений всего: 37
Дата рег-ции: Апр. 2017  


Помог: 0 раз(а)




Не выходит, с точками на странице данные дублируются. Но что с ними, что без них, вариант - foto/123.png прописывается текстово. Эту строку почему-то не обрамляет
 
 Top
Строитель Модератор
Отправлено: 04 Апреля, 2017 - 13:10:09
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




bellagio пишет:
Не выходит, с точками на странице данные дублируются. Но что с ними, что без них, вариант - foto/123.png прописывается текстово. Эту строку почему-то не обрамляет
Значит надо пересмотреть вариант решения. Напомните, пожалуйста, условие вашей задачи.
 
 Top
bellagio
Отправлено: 04 Апреля, 2017 - 13:14:55
Post Id


Новичок


Покинул форум
Сообщений всего: 37
Дата рег-ции: Апр. 2017  


Помог: 0 раз(а)




При создании новой записи в блоге, в редакторе tinymce автор оставляет текстовые строки и записи на картинки типа:
CODE (htmlphp):
скопировать код в буфер обмена
  1.     foto/123.png=а тут описание картинки+тут альт картинки
  2.     foto/123.png=а тут описание картинки
  3.     foto/123.png

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

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

Кроме того, существует еще и видео ролики, которые тоже вставляются по ссылке. Но с ними нет проблем, ибо запись для поиска ссылки одна, и не изменяется.

(Отредактировано автором: 04 Апреля, 2017 - 13:15:34)

 
 Top
Строитель Модератор
Отправлено: 04 Апреля, 2017 - 13:22:31
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




bellagio, похоже, что в текущей версии кода происходит перезапись ранее обработанных данных. Если это так, то я думаю, что надо убрать preg_replace(), и вместо неё подставлять найденные данные функцикей preg_match(), добавив к ней третий параметр, в который будут "складываться" найденные строки:

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

Если сами не справитесь, то дайте мне пример строки, которую вы подаёте на вход вашей функции - я набросаю пример кода на её основе.

(Отредактировано автором: 04 Апреля, 2017 - 13:25:33)

 
 Top
bellagio
Отправлено: 04 Апреля, 2017 - 13:43:38
Post Id


Новичок


Покинул форум
Сообщений всего: 37
Дата рег-ции: Апр. 2017  


Помог: 0 раз(а)




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
 
 Top
Строитель Модератор
Отправлено: 04 Апреля, 2017 - 20:30:39
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




bellagio, пробуйте
Спойлер (Отобразить)
 
 Top
bellagio
Отправлено: 05 Апреля, 2017 - 05:51:20
Post Id


Новичок


Покинул форум
Сообщений всего: 37
Дата рег-ции: Апр. 2017  


Помог: 0 раз(а)




Код отрабатывает для одного из первых попавшихся результатов. Но не для всех и сразу
 
 Top
Строитель Модератор
Отправлено: 05 Апреля, 2017 - 08:06:47
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




bellagio пишет:
Код отрабатывает для одного из первых попавшихся результатов. Но не для всех и сразу
Покажите, как вы передаете данные на вход.
 
 Top
bellagio
Отправлено: 05 Апреля, 2017 - 12:11:59
Post Id


Новичок


Покинул форум
Сообщений всего: 37
Дата рег-ции: Апр. 2017  


Помог: 0 раз(а)




у меня идет переменная в шаблоне - [[parse_img? &input=`[[*content]]`]]

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

а плагин их должен распознать и оформить соответственно
 
 Top
Строитель Модератор
Отправлено: 05 Апреля, 2017 - 18:22:10
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




bellagio, т.е., фактически вы подаёте на вход такую строку?

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


Или нет?
 
 Top
bellagio
Отправлено: 05 Апреля, 2017 - 20:10:54
Post Id


Новичок


Покинул форум
Сообщений всего: 37
Дата рег-ции: Апр. 2017  


Помог: 0 раз(а)




Строитель пишет:
bellagio, т.е., фактически вы подаёте на вход такую строку?

Да
 
 Top
Строитель Модератор
Отправлено: 05 Апреля, 2017 - 21:25:43
Post Id



Участник


Покинул форум
Сообщений всего: 1580
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 73 раз(а)




bellagio, это и нужно было указать в самом начале, когда я просил показать строку, передаваемую в вашу функцию. Пробуйте
Спойлер (Отобразить)
 
 Top
Страниц (5): « 1 2 [3] 4 5 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB