PHP.SU

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

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

> Найдено сообщений: 37
bellagio Отправлено: 05 Апреля, 2017 - 12:11:59 • Тема: По разбивке предложения • Форум: Регулярные выражения

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

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

а плагин их должен распознать и оформить соответственно
bellagio Отправлено: 05 Апреля, 2017 - 05:51:20 • Тема: По разбивке предложения • Форум: Регулярные выражения

Ответов: 73
Просмотров: 3750
Код отрабатывает для одного из первых попавшихся результатов. Но не для всех и сразу
bellagio Отправлено: 04 Апреля, 2017 - 13:43:38 • Тема: По разбивке предложения • Форум: Регулярные выражения

Ответов: 73
Просмотров: 3750
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
bellagio Отправлено: 04 Апреля, 2017 - 13:14:55 • Тема: По разбивке предложения • Форум: Регулярные выражения

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

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

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

Кроме того, существует еще и видео ролики, которые тоже вставляются по ссылке. Но с ними нет проблем, ибо запись для поиска ссылки одна, и не изменяется.
bellagio Отправлено: 04 Апреля, 2017 - 13:06:57 • Тема: По разбивке предложения • Форум: Регулярные выражения

Ответов: 73
Просмотров: 3750
Не выходит, с точками на странице данные дублируются. Но что с ними, что без них, вариант - foto/123.png прописывается текстово. Эту строку почему-то не обрамляет
bellagio Отправлено: 04 Апреля, 2017 - 12:54:06 • Тема: По разбивке предложения • Форум: Регулярные выражения

Ответов: 73
Просмотров: 3750
так:
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.     }
bellagio Отправлено: 04 Апреля, 2017 - 12:47:55 • Тема: По разбивке предложения • Форум: Регулярные выражения

Ответов: 73
Просмотров: 3750
Не выходит. Все равно идет отображение первой картинки. остальные прописываются только текстово
bellagio Отправлено: 04 Апреля, 2017 - 12:08:18 • Тема: По разбивке предложения • Форум: Регулярные выражения

Ответов: 73
Просмотров: 3750
Есть ошибки...
Если на странице встречается содержимое разных видов скрипт берет первое:
CODE (htmlphp):
скопировать код в буфер обмена
  1. foto/123.png=а тут описание картинки+тут альт картинки
  2. foto/123.png=а тут описание картинки
  3. foto/123.png

Получается для каждого вида писать свою функцию?
bellagio Отправлено: 04 Апреля, 2017 - 08:53:02 • Тема: По разбивке предложения • Форум: Регулярные выражения

Ответов: 73
Просмотров: 3750
Да мне нужен именно переключатель смешанных мультимедийных (фото и видео) на странице. Собственно на данный момент это решение работает.
bellagio Отправлено: 04 Апреля, 2017 - 07:56:09 • Тема: По разбивке предложения • Форум: Регулярные выражения

Ответов: 73
Просмотров: 3750
Строитель пишет:
А, понял - это размер определяется для видео.

да именно так.
bellagio Отправлено: 04 Апреля, 2017 - 07:44:26 • Тема: По разбивке предложения • Форум: Регулярные выражения

Ответов: 73
Просмотров: 3750
У меня в коде, еще идет дополнение параметром в функции обрамления видео:
CODE (htmlphp):
скопировать код в буфер обмена
  1.         function out($str,$hw_zize) {
  2.             $str = parse_links_image($str);
  3.             $str = parse_links_video($str,$hw_size);
  4.            
  5.             return $str;
  6.         }
  7. $hw_size= (isset($ry) || count(explode('x',$ry)) == 2) ? explode('x',$ry) : array(500,375);
  8.  

Может по этому.

Я как бы в пхп не очень силен, посему, хотелось бы сделать проверку грамотной. Не приятно будет увидеть когда сайт наполнится, и поплывут данные или перестанут отображаться вовсе...
bellagio Отправлено: 04 Апреля, 2017 - 07:29:39 • Тема: По разбивке предложения • Форум: Регулярные выражения

Ответов: 73
Просмотров: 3750
добавив конкатенацию:
CODE (htmlphp):
скопировать код в буфер обмена
  1.     function out($str) {
  2.         $str = parse_links_image($str);
  3.         $str .= parse_links_video($str);
  4.        
  5.         return $str;
  6.     }

данные на странице начинаю дублироваться, то есть отображаются по два раза
bellagio Отправлено: 04 Апреля, 2017 - 07:04:29 • Тема: По разбивке предложения • Форум: Регулярные выражения

Ответов: 73
Просмотров: 3750
Строитель - спасибо за пинок!

В конечном итоге получил два вида рабочего кода. Но воспользовался более структурированным вторым. Как и подсказали сделал две функции, отдельно на видео, и отдельно на изображения. И свел проверку по двум функциям в третьей:
CODE (htmlphp):
скопировать код в буфер обмена
  1. function out($str) {
  2.     $str = parse_links_image($str);
  3.     $str = parse_links_video($str);
  4.    
  5.     return $str;
  6. }

Код отрабатывает и в процессе построения фронтенд странички преобразует строки с картинками и видео роликами, в обрамленный тегами код.

Строитель, я думаю что проверка такого рода является структурированной. Что думаете?
bellagio Отправлено: 03 Апреля, 2017 - 22:49:24 • Тема: По разбивке предложения • Форум: Регулярные выражения

Ответов: 73
Просмотров: 3750
попробовал вариант:
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.  
  18.        $rules = array(
  19.            #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>',
  20.       );
  21.         foreach ($rules as $link => $player){
  22.         $str = preg_replace($link, $player, $str);
  23.         }
  24. }
  25.      
  26.         return preg_replace($pattern, $replace, $str);
  27.     }


Код отрабатывает как нужно. То есть и картинки выводит и видео. Но вопрос в том, грамотно ли в техническом плане такой вариант обработки данных в функции?
bellagio Отправлено: 03 Апреля, 2017 - 22:18:58 • Тема: По разбивке предложения • Форум: Регулярные выражения

Ответов: 73
Просмотров: 3750
Получается, если я собираю конструкцию проверки таким образом:
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.     }

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

Не могу понять почему в такой проверке вываливается одно из.

Страниц (3): « 1 [2] 3 »
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB