PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Страниц (3): « 1 [2] 3 »
Найдено сообщений: 37
bellagio
Отправлено: 05 Апреля, 2017 - 12:11:59 • Тема: По разбивке предложения • Форум: Регулярные выражения
Ответов: 73 Просмотров: 3750
у меня идет переменная в шаблоне - [[parse_img? &input=`[[*content]]`]]
где, parse_img - это название нашего плагина, для обработки картинок. А сам [[*content]] - это стандартная переменная cms для вывода тех данных что введены в редакторе tinymce, иными словами сам текст статьи. В тексте статьи, мы вставляем ссылки:
а плагин их должен распознать и оформить соответственно
bellagio
Отправлено: 04 Апреля, 2017 - 13:43:38 • Тема: По разбивке предложения • Форум: Регулярные выражения
Ответов: 73 Просмотров: 3750
CODE (
htmlphp ):
скопировать код в буфер обмена
function parse_links_image($str) {
$result = false;
$arr = array();
if (preg_match('~foto/(.+)=(.+)\+(.+)~iu', $str, $arr)) {
$pattern = '~foto/(.+)=(.+)\+(.+)~iu';
$replace = '< div class= "wp-caption aligncenter" > '.
'< img src= "foto/$1 " alt= "$3 " /> '.
'< div class= "wp-caption-text" > $2</ div></ div> ';
$result = preg_replace($pattern, $replace, $str);
}
if (preg_match('~foto/(.+)=(.+)~iu', $str, $arr)) {
$pattern = '~foto/(.+)=(.+)~iu';
$replace = '< div class= "wp-caption aligncenter" > '.
'< img src= "foto/$1 " alt= "$2 " /> '.
< div class= "wp-caption-text" > $2</ div></ div> ';
$result = preg_replace($pattern, $replace, $str);
}
if (preg_match('~foto/(.+)', $str, $arr)) {
$pattern = '~foto/(.+)';
$replace = '< p>< img src= "foto/$1 " alt= "" /></ p> ';
$result = preg_replace($pattern, $replace, $str);
}
return $result;
}
return parse_links_image($input);
Примеры строк все те же:
bellagio
Отправлено: 04 Апреля, 2017 - 13:14:55 • Тема: По разбивке предложения • Форум: Регулярные выражения
Ответов: 73 Просмотров: 3750
При создании новой записи в блоге, в редакторе tinymce автор оставляет текстовые строки и записи на картинки типа:
CODE (
htmlphp ):
скопировать код в буфер обмена
foto/ 123. png= а тут описание картинки+ тут альт картинки
foto/ 123. png= а тут описание картинки
foto/ 123. png
на странице могут присутствовать все три типа вышеописанной записи для картинок. В соответствии с чем, каждую из них необходимо обрамлять.
Обрамление в примерах выше.
Кроме того, существует еще и видео ролики, которые тоже вставляются по ссылке. Но с ними нет проблем, ибо запись для поиска ссылки одна, и не изменяется.
bellagio
Отправлено: 04 Апреля, 2017 - 13:06:57 • Тема: По разбивке предложения • Форум: Регулярные выражения
Ответов: 73 Просмотров: 3750
Не выходит, с точками на странице данные дублируются. Но что с ними, что без них, вариант - foto/123.png прописывается текстово. Эту строку почему-то не обрамляет
bellagio
Отправлено: 04 Апреля, 2017 - 12:54:06 • Тема: По разбивке предложения • Форум: Регулярные выражения
Ответов: 73 Просмотров: 3750
так:
CODE (
htmlphp ):
скопировать код в буфер обмена
function parse_links_image($str) {
$result = false;
if (preg_match('~foto/(.+)=(.+)\+(.+)~iu', $str)) {
$pattern = '~foto/(.+)=(.+)\+(.+)~iu';
$result = '< div class= "wp-caption aligncenter" > '.
'< img src= "foto/$1 " alt= "$3 " /> '.
'< div class= "wp-caption-text" > $2</ div></ div> ';
}
if (preg_match('~foto/(.+)=(.+)~iu', $str)) {
$pattern = '~foto/(.+)=(.+)~iu';
$result= '< div class= "wp-caption aligncenter" > '.
'< img src= "foto/$1 " alt= "$2 " /> '.
'< div class= "wp-caption-text" > $2</ div></ div> ';
}
if (preg_match('~foto/(.+)', $str)) {
$pattern = '~foto/(.+)';
$result= '< div class= "wp-caption aligncenter" > '.
'< img src= "foto/$1 " alt= "" /></ div> ';
}
return preg_replace($pattern, $result, $str);
}
bellagio
Отправлено: 04 Апреля, 2017 - 12:08:18 • Тема: По разбивке предложения • Форум: Регулярные выражения
Ответов: 73 Просмотров: 3750
Есть ошибки...
Если на странице встречается содержимое разных видов скрипт берет первое:
Получается для каждого вида писать свою функцию?
bellagio
Отправлено: 04 Апреля, 2017 - 08:53:02 • Тема: По разбивке предложения • Форум: Регулярные выражения
Ответов: 73 Просмотров: 3750
Да мне нужен именно переключатель смешанных мультимедийных (фото и видео) на странице. Собственно на данный момент это решение работает.
bellagio
Отправлено: 04 Апреля, 2017 - 07:44:26 • Тема: По разбивке предложения • Форум: Регулярные выражения
Ответов: 73 Просмотров: 3750
У меня в коде, еще идет дополнение параметром в функции обрамления видео:
CODE (
htmlphp ):
скопировать код в буфер обмена
function out( $str , $hw_zize ) {
$str = parse_links_image( $str ) ;
$str = parse_links_video( $str , $hw_size ) ;
return $str ;
}
Может по этому.
Я как бы в пхп не очень силен, посему, хотелось бы сделать проверку грамотной. Не приятно будет увидеть когда сайт наполнится, и поплывут данные или перестанут отображаться вовсе...
bellagio
Отправлено: 04 Апреля, 2017 - 07:04:29 • Тема: По разбивке предложения • Форум: Регулярные выражения
Ответов: 73 Просмотров: 3750
Строитель - спасибо за пинок!
В конечном итоге получил два вида рабочего кода. Но воспользовался более структурированным вторым. Как и подсказали сделал две функции, отдельно на видео, и отдельно на изображения. И свел проверку по двум функциям в третьей:
Код отрабатывает и в процессе построения фронтенд странички преобразует строки с картинками и видео роликами, в обрамленный тегами код.
Строитель, я думаю что проверка такого рода является структурированной. Что думаете?
bellagio
Отправлено: 03 Апреля, 2017 - 22:49:24 • Тема: По разбивке предложения • Форум: Регулярные выражения
Ответов: 73 Просмотров: 3750
попробовал вариант:
CODE (
htmlphp ):
скопировать код в буфер обмена
function parse_links_image($str) {
if (preg_match('~foto/(.+)=(.+)\+(.+)~iu', $str)) {
$pattern = '~foto/(.+)=(.+)\+(.+)~iu';
$replace = '< div class= "wp-caption aligncenter" > '.
'< img src= "foto/$1 " alt= "$3 " /> '.
'< div class= "wp-caption-text" > $2</ div></ div> ';
} elseif (preg_match('~foto/(.+)=(.+)~iu', $str)) {
$pattern = '~foto/(.+)=(.+)~iu';
$replace = '< div class= "wp-caption aligncenter" > '.
'< img src= "foto/$1 " alt= "$2 " /> '.
'< div class= "wp-caption-text" > $2</ div></ div> ';
} else {
$pattern = '~foto/(.+)~iu';
$replace = '< div class= "wp-caption_one aligncenter" > '.
'< img src= "foto/$1 " alt= "" /></ div> ';
}
$rules = array(
#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>',
);
foreach ($rules as $link => $player){
$str = preg_replace($link, $player, $str);
}
}
return preg_replace($pattern, $replace, $str);
}
Код отрабатывает как нужно. То есть и картинки выводит и видео. Но вопрос в том, грамотно ли в техническом плане такой вариант обработки данных в функции?
bellagio
Отправлено: 03 Апреля, 2017 - 22:18:58 • Тема: По разбивке предложения • Форум: Регулярные выражения
Ответов: 73 Просмотров: 3750
Получается, если я собираю конструкцию проверки таким образом:
CODE (
htmlphp ):
скопировать код в буфер обмена
function parse_links_image($str) {
if (preg_match('https://(www\.)?youtube\.com/watch\?v=([^&\n]+)(&.*?(\n|\s))?#i', $str)) {
$pattern = 'https://(www\.)?youtube\.com/watch\?v=([^&\n]+)(&.*?(\n|\s))?#i';
$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> ';
}
if (preg_match('~foto/(.+)=(.+)\+(.+)~iu', $str)) {
$pattern = '~foto/(.+)=(.+)\+(.+)~iu';
$replace = '< div class= "wp-caption aligncenter" > '.
'< img src= "foto/$1 " alt= "$3 " /> '.
'< div class= "wp-caption-text" > $2</ div></ div> ';
} elseif (preg_match('~foto/(.+)=(.+)~iu', $str)) {
$pattern = '~foto/(.+)=(.+)~iu';
$replace = '< div class= "wp-caption aligncenter" > '.
'< img src= "foto/$1 " alt= "$2 " /> '.
'< div class= "wp-caption-text" > $2</ div></ div> ';
} else {
$pattern = '~foto/(.+)~iu';
$replace = '< div class= "wp-caption_one aligncenter" > '.
'< img src= "foto/$1 " alt= "" /></ div> ';
}
return preg_replace($pattern, $replace, $str);
}
Картинки выводятся, но не видео.
А если таким:
CODE (
htmlphp ):
скопировать код в буфер обмена
function parse_links_image($str) {
if (preg_match('~foto/(.+)=(.+)\+(.+)~iu', $str)) {
$pattern = '~foto/(.+)=(.+)\+(.+)~iu';
$replace = '< div class= "wp-caption aligncenter" > '.
'< img src= "foto/$1 " alt= "$3 " /> '.
'< div class= "wp-caption-text" > $2</ div></ div> ';
} elseif (preg_match('~foto/(.+)=(.+)~iu', $str)) {
$pattern = '~foto/(.+)=(.+)~iu';
$replace = '< div class= "wp-caption aligncenter" > '.
'< img src= "foto/$1 " alt= "$2 " /> '.
'< div class= "wp-caption-text" > $2</ div></ div> ';
} else {
$pattern = '~foto/(.+)~iu';
$replace = '< div class= "wp-caption_one aligncenter" > '.
'< img src= "foto/$1 " alt= "" /></ div> ';
}
if (preg_match('https://(www\.)?youtube\.com/watch\?v=([^&\n]+)(&.*?(\n|\s))?#i', $str)) {
$pattern = 'https://(www\.)?youtube\.com/watch\?v=([^&\n]+)(&.*?(\n|\s))?#i';
$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> ';
}
return preg_replace($pattern, $replace, $str);
}
то выводится видео и не выводится картинки.
Не могу понять почему в такой проверке вываливается одно из.
Страниц (3): « 1 [2] 3 »
Powered by ExBB FM 1.0 RC1. InvisionExBB