PHP.SU

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


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

> Без описания
bellagio
Отправлено: 01 Апреля, 2017 - 11:25:59
Post Id


Новичок


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


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




Приветствую.

Суть мини плагина в том, чтобы подменивать предложения в редакторе вида:
foro/123.png=а тут описание картинки
в обрамление тегами.

код плагина:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php
  2. function parse_links_image($str) {
  3.         $rules = array(
  4.                 '|foto/([a-zA-Z0-9-./]+)|',
  5.                 '|=(/^[0-9a-zA-Zа-яёА-ЯЁ\s\-\!\?\(\)]+$/)=|',
  6.         );
  7.        $str = preg_replace($rules, '<div class="wp-caption aligncenter"><img src="foto/$1" alt="" /><div class="wp-caption-text">$2</div></div>', $str);
  8.    return $str;
  9. }
  10.  
  11. return parse_links_image($input);


Все получается, картинка подменяется, а вот описание текста я никак не могу вывести в тег <div class="wp-caption-text">. Буду весьма благодарен, если поможете
 
 Top
Строитель
Отправлено: 01 Апреля, 2017 - 13:00:49
Post Id



Частый посетитель


Просматривает форум
Сообщений всего: 972
Дата рег-ции: Февр. 2014  


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




bellagio, попробуйте так:
Спойлер (Отобразить)
А вообще, всегда публикуйте исходную строку, из которой вам нужно вытянуть данные.
 
 Top
bellagio
Отправлено: 01 Апреля, 2017 - 13:27:37
Post Id


Новичок


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


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




не работает, данный вариант.

Что касается:
Цитата:
А вообще, всегда публикуйте исходную строку, из которой вам нужно вытянуть данные.

суть такая, редактор tiny, для удобства администрации сайта в процессе публикации статьи, нужен плагин для отображения картинок. То есть, редактор в текстовом редакторе вставляет строку, типа:
CODE (htmlphp):
скопировать код в буфер обмена
  1. foto/123.png=а тут описание картинки

а плагин, в процессе построения фронтенд странички преобразует строку в обрамленные тегами данные.
 
 Top
Строитель
Отправлено: 01 Апреля, 2017 - 13:35:20
Post Id



Частый посетитель


Просматривает форум
Сообщений всего: 972
Дата рег-ции: Февр. 2014  


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




bellagio пишет:
foto/123.png=а тут описание картинки
Т.е., из этой строки вам на выходе нужно получить нечто подобное?

CODE (html):
скопировать код в буфер обмена
  1. <img src="foto/123.png" alt="а тут описание картинки" />
 
 Top
bellagio
Отправлено: 01 Апреля, 2017 - 13:37:57
Post Id


Новичок


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


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




Нет что-то такое:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <div class="wp-caption aligncenter"><img src="foto/123.png" alt="а тут описание картинки" /><div class="wp-caption-text">а тут описание картинки</div></div>
  3.  
 
 Top
Строитель
Отправлено: 01 Апреля, 2017 - 13:48:05
Post Id



Частый посетитель


Просматривает форум
Сообщений всего: 972
Дата рег-ции: Февр. 2014  


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




bellagio, вроде бы так
Спойлер (Отобразить)
 
 Top
bellagio
Отправлено: 01 Апреля, 2017 - 14:07:47
Post Id


Новичок


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


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




Строитель, да действительно, все так! Спасибо!

А вот если у картинки не будет продолжения к после пути, то есть в редакторе будет только путь:

нужна проверка для того, чтобы обрамить эту картинку иным тегом.

То есть конечный результат должен быть для картинки типа:
CODE (htmlphp):
скопировать код в буфер обмена
  1. foto/123.png=а тут описание картинки

таким как в текущем коде.
А для:

тег обрамления будет:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <div class="wp-caption_one aligncenter"><img src="foto/123.png" /></div>
 
 Top
Строитель
Отправлено: 01 Апреля, 2017 - 14:21:00
Post Id



Частый посетитель


Просматривает форум
Сообщений всего: 972
Дата рег-ции: Февр. 2014  


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




bellagio
Спойлер (Отобразить)
 
 Top
bellagio
Отправлено: 01 Апреля, 2017 - 14:49:21
Post Id


Новичок


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


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




Спасибо! Момент, если мне нужно поставить еще один параметр в строке:
CODE (htmlphp):
скопировать код в буфер обмена
  1. foto/123.png=а тут описание картинки+тут альт картинки

Что не так в коде:
CODE (htmlphp):
скопировать код в буфер обмена
  1. function parse_links_image($str) {
  2.     if (preg_match('~foto/(.+)=(.+)~iu', $str)) {
  3.         $str = preg_replace(
  4.             '~foto/(.+)=(.+)+(.+)~iu',
  5.             '<div class="wp-caption aligncenter">'.
  6.             '<img src="foto/$1" alt="$3" />'.
  7.             '<div class="wp-caption-text">$2</div></div>',
  8.             $str
  9.         );
  10.     } else {
  11.         $str = preg_replace(
  12.             '~foto/(.+)~iu',
  13.             '<div class="wp-caption_one aligncenter">'.
  14.             '<img src="foto/$1" alt="" /></div>',
  15.             $str
  16.         );
  17.     }
  18.  
  19.     return $str;
  20. }
 
 Top
Строитель
Отправлено: 01 Апреля, 2017 - 15:05:03
Post Id



Частый посетитель


Просматривает форум
Сообщений всего: 972
Дата рег-ции: Февр. 2014  


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




bellagio
Спойлер (Отобразить)
Не много сократил код

(Отредактировано автором: 01 Апреля, 2017 - 16:25:07)

 
 Top
bellagio
Отправлено: 03 Апреля, 2017 - 19:55:31
Post Id


Новичок


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


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




Спасибо! Попробовал еще добавить оформление ютуб ссылки не вышло, где-то ошибся

CODE (htmlphp):
скопировать код в буфер обмена
  1. function parse_links_image($str) {
  2.     if (preg_match('https://(www\.)?youtube\.com/watch\?v=([^&\n]+)(&.*?(\n|\s))?#i', $str)) {
  3.        $pattern = 'https://(www\.)?youtube\.com/watch\?v=([^&\n]+)(&.*?(\n|\s))?#i';
  4.         $replace = '<object width="500'" height="375"><param name="wmode" value="opaque"></param><param name="movie" value="https://www.youtube.com/v/$2"></param><embed src="https://www.youtube.com/v/$2" type="application/x-shockwave-flash" width="500" height="375"></embed></param></embed></object>';    
  5.     }
  6.     if (preg_match('~foto/(.+)=(.+)\+(.+)~iu', $str)) {
  7.         $pattern = '~foto/(.+)=(.+)\+(.+)~iu';
  8.         $replace = '<div class="wp-caption aligncenter">'.
  9.             '<img src="foto/$1" alt="$3" />'.
  10.             '<div class="wp-caption-text">$2</div></div>';
  11.     } elseif (preg_match('~foto/(.+)=(.+)~iu', $str)) {
  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.     } else {
  17.         $pattern = '~foto/(.+)~iu';
  18.         $replace = '<div class="wp-caption_one aligncenter">'.
  19.             '<img src="foto/$1" alt="" /></div>';
  20.     }
  21.  
  22.     return preg_replace($pattern, $replace, $str);
  23. }
 
 Top
Строитель
Отправлено: 03 Апреля, 2017 - 19:59:05
Post Id



Частый посетитель


Просматривает форум
Сообщений всего: 972
Дата рег-ции: Февр. 2014  


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




bellagio, ну я скажу вам честно - искать ошибки в чьём-то коде это то ещё занятие Радость Поэтому совет - почитайте о правилах составления шаблонов для регулярных выражений, и напишите новый шаблон для вашей задачи.
 
 Top
bellagio
Отправлено: 03 Апреля, 2017 - 21:37:04
Post Id


Новичок


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


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




Так писать новую функцию стоит? Для обработки видео ссылок?
(Добавление)
К примеру вот:
CODE (htmlphp):
скопировать код в буфер обмена
  1. function parse_links_video($str) {
  2.     $rules = array(
  3.                 '#http://(www\.)?youtube\.com/watch\?v=([^&\n]+)(&.*?(\n|\s))?#i' => '<object width="500" height="375"><param name="wmode" value="opaque"></param><param name="movie" value="http://www.youtube.com/v/$2"></param><embed src="http://www.youtube.com/v/$2" type="application/x-shockwave-flash" width="500" height="375"></embed></param></embed></object>',
  4.        );
  5.         foreach ($rules as $link => $player){
  6.         $str = preg_replace($link, $player, $str);
  7.         }
  8.         return $str;
  9. }
  10.  
  11. return parse_links_video($input);


но суть в том, что бы объединить этот и вышеописанные два кода в один, с выполнением в одном скрипте
 
 Top
Строитель
Отправлено: 03 Апреля, 2017 - 21:50:47
Post Id



Частый посетитель


Просматривает форум
Сообщений всего: 972
Дата рег-ции: Февр. 2014  


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




bellagio пишет:
Так писать новую функцию стоит? Для обработки видео ссылок?
Нет, не функцию переписать, а код шаблона регулярного выражения. Сперва его можно написать отдельно от функции, а при положительном результате его теста - прописать в тело функции.
 
 Top
bellagio
Отправлено: 03 Апреля, 2017 - 22:18:58
Post Id


Новичок


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


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




Получается, если я собираю конструкцию проверки таким образом:
CODE (htmlphp):
скопировать код в буфер обмена
  1.     function parse_links_image($str) {
  2.         if (preg_match('https://(www\.)?youtube\.com/watch\?v=([^&\n]+)(&.*?(\n|\s))?#i', $str)) {
  3.           $pattern = 'https://(www\.)?youtube\.com/watch\?v=([^&\n]+)(&.*?(\n|\s))?#i';
  4.             $replace = '<object width="500'" height="375"><param name="wmode" value="opaque"></param><param name="movie" value="https://www.youtube.com/v/$2"></param><embed src="https://www.youtube.com/v/$2" type="application/x-shockwave-flash" width="500" height="375"></embed></param></embed></object>';    
  5.         }
  6.         if (preg_match('~foto/(.+)=(.+)\+(.+)~iu', $str)) {
  7.             $pattern = '~foto/(.+)=(.+)\+(.+)~iu';
  8.             $replace = '<div class="wp-caption aligncenter">'.
  9.                 '<img src="foto/$1" alt="$3" />'.
  10.                 '<div class="wp-caption-text">$2</div></div>';
  11.         } elseif (preg_match('~foto/(.+)=(.+)~iu', $str)) {
  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.         } else {
  17.             $pattern = '~foto/(.+)~iu';
  18.             $replace = '<div class="wp-caption_one aligncenter">'.
  19.                 '<img src="foto/$1" alt="" /></div>';
  20.         }
  21.      
  22.         return preg_replace($pattern, $replace, $str);
  23.     }

Картинки выводятся, но не видео.
А если таким:
CODE (htmlphp):
скопировать код в буфер обмена
  1.     function parse_links_image($str) {
  2.         if (preg_match('~foto/(.+)=(.+)\+(.+)~iu', $str)) {
  3.             $pattern = '~foto/(.+)=(.+)\+(.+)~iu';
  4.             $replace = '<div class="wp-caption aligncenter">'.
  5.                 '<img src="foto/$1" alt="$3" />'.
  6.                 '<div class="wp-caption-text">$2</div></div>';
  7.         } elseif (preg_match('~foto/(.+)=(.+)~iu', $str)) {
  8.             $pattern = '~foto/(.+)=(.+)~iu';
  9.             $replace = '<div class="wp-caption aligncenter">'.
  10.                 '<img src="foto/$1" alt="$2" />'.
  11.                 '<div class="wp-caption-text">$2</div></div>';
  12.         } else {
  13.             $pattern = '~foto/(.+)~iu';
  14.             $replace = '<div class="wp-caption_one aligncenter">'.
  15.                 '<img src="foto/$1" alt="" /></div>';
  16.         }
  17.         if (preg_match('https://(www\.)?youtube\.com/watch\?v=([^&\n]+)(&.*?(\n|\s))?#i', $str)) {
  18.           $pattern = 'https://(www\.)?youtube\.com/watch\?v=([^&\n]+)(&.*?(\n|\s))?#i';
  19.             $replace = '<object width="500'" height="375"><param name="wmode" value="opaque"></param><param name="movie" value="https://www.youtube.com/v/$2"></param><embed src="https://www.youtube.com/v/$2" type="application/x-shockwave-flash" width="500" height="375"></embed></param></embed></object>';    
  20.         }
  21.      
  22.         return preg_replace($pattern, $replace, $str);
  23.     }

то выводится видео и не выводится картинки.

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


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB