Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.
Поступила тут одна "хотелка" от клиента. спешу поделиться:)
Итак: есть сайт, на котором публикуется (точнее пока что планируется к публикации) огромное количество статей. В этих статьях по тексту контент-менеджеры могут накидывать какие-то изображения, поясняющие текст. НО! заниматься подгонкой изображений к читабельному виду для такого количества статей им то ли лень, то ли денег жалко ... и захотел клиент, чтобы все-таки изображения ужимались. причем, ужимались сервером, а не браузером клиента.
И вот родилась идея:
в компоненте детального вывода статьи в файле result_modifier создаею обработчик:
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
$pattern="/<img[^>]+src=(\"|')(.+?)(\"|')[^>]*>/si";
preg_match_all($pattern,$arResult["DETAIL_TEXT"],$matches);
$startfloat="right";
$arResult["DETAIL_TEXT"]=str_replace(SITE_SERVER_NAME,"",$arResult["DETAIL_TEXT"]);
$arResult["DETAIL_TEXT"]=str_replace(str_replace("http://","http://www .",SITE_SERVER_NAME),"",$arResult["DETAIL_TEXT"]);
foreach ($matches[0] as $k=>$image) {
$imgSrc='<а class="fancy" href="'.$matches[2][$k].'" >';
$imgSrc.=CFile::ShowImage($matches[2][$k], 300, 300, "style='float:".$startfloat.";margin:5px;'", "", false);
$imgSrc.="</а>";
$arResult["DETAIL_TEXT"]=str_replace($image,$imgSrc,$arResult["DETAIL_TEXT"]);
if($startfloat=="right") $startfloat="left"; else $startfloat="right";
}
?>
в итоге, все изображения ужимаются в 300 на 300, а если кто хочет - в fancybox (если конечно к вашему сайту подключена данная библиотека) может посмотреть в полном размере...
P.S. Спасибо другу моему, Андрею - великому гуру веб-мира, за постоянную помощь с регулярными выражениями (да и не только), с которыми я все никак не подружусь:(
ДОБАВЛЕНИЕ ОТ 22.03: оставляем у изображений title и alt
текст файла result_modifier немного видоизменился:
первым шагом выбираем все изображения из текста. А затем уже получаем все атрибуты для конкретного изображения и данные по изображению помещаем в массив.
А потом уже для каждого изображения делаем подмену в детальном тексте
Назад в раздел
то ждем ваше обращение в нашей службе тех поддержки.
Замена изображений внутри Detail_Text на show_image()
Доброго времени суток, уважаемое сообщество!!!Поступила тут одна "хотелка" от клиента. спешу поделиться:)
Итак: есть сайт, на котором публикуется (точнее пока что планируется к публикации) огромное количество статей. В этих статьях по тексту контент-менеджеры могут накидывать какие-то изображения, поясняющие текст. НО! заниматься подгонкой изображений к читабельному виду для такого количества статей им то ли лень, то ли денег жалко ... и захотел клиент, чтобы все-таки изображения ужимались. причем, ужимались сервером, а не браузером клиента.
И вот родилась идея:
в компоненте детального вывода статьи в файле result_modifier создаею обработчик:
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
$pattern="/<img[^>]+src=(\"|')(.+?)(\"|')[^>]*>/si";
preg_match_all($pattern,$arResult["DETAIL_TEXT"],$matches);
$startfloat="right";
$arResult["DETAIL_TEXT"]=str_replace(SITE_SERVER_NAME,"",$arResult["DETAIL_TEXT"]);
$arResult["DETAIL_TEXT"]=str_replace(str_replace("http://","
foreach ($matches[0] as $k=>$image) {
$imgSrc='<а class="fancy" href="'.$matches[2][$k].'" >';
$imgSrc.=CFile::ShowImage($matches[2][$k], 300, 300, "style='float:".$startfloat.";margin:5px;'", "", false);
$imgSrc.="</а>";
$arResult["DETAIL_TEXT"]=str_replace($image,$imgSrc,$arResult["DETAIL_TEXT"]);
if($startfloat=="right") $startfloat="left"; else $startfloat="right";
}
?>
в итоге, все изображения ужимаются в 300 на 300, а если кто хочет - в fancybox (если конечно к вашему сайту подключена данная библиотека) может посмотреть в полном размере...
P.S. Спасибо другу моему, Андрею - великому гуру веб-мира, за постоянную помощь с регулярными выражениями (да и не только), с которыми я все никак не подружусь:(
ДОБАВЛЕНИЕ ОТ 22.03: оставляем у изображений title и alt
текст файла result_modifier немного видоизменился:
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die(); $patternSRC="/[^>]+src=(\"|')(.+?)(\"|')[^>]*>/si"; $pattern2="/(alt|src|title)=(\"|')(.+?)(\"|')/si"; $pattern="/<img([^>]*)\/?>/si"; preg_match_all($pattern,$arResult["DETAIL_TEXT"],$matches); $modifiedImages=array(); foreach($matches[1] as $k=>$image){ preg_match_all($pattern2,$image,$Attrmatches); $attributes=array(); foreach($Attrmatches[1] as $kT=>$Tmp){ $attributes[$Tmp]=$Attrmatches[3][$kT]; } $modifiedImages[$matches[0][$k]]=$attributes; } $startfloat="right"; $arResult["DETAIL_TEXT"]=str_replace(SITE_SERVER_NAME,"",$arResult["DETAIL_TEXT"]); $arResult["DETAIL_TEXT"]=str_replace(str_replace("http://","http://www.",SITE_SERVER_NAME),"",$arResult["DETAIL_TEXT"]); foreach ($modifiedImages as $image=>$attributes) { $imgSrc='<a class="fancy" href="'.$attributes["src"].'" title="'.$attributes["title"].'" >'; $imgSrc.=CFile::ShowImage($attributes["src"], 300, 300, "alt='".$attributes["alt"]."' title='".$attributes["title"]."' style='float:".$startfloat.";margin: 5px;'", "", false); $imgSrc.="</a>"; $arResult["DETAIL_TEXT"]=str_replace($image,$imgSrc,$arResult["DETAIL_TEXT"]); if($startfloat=="right") $startfloat="left"; else $startfloat="right"; } ?> |
первым шагом выбираем все изображения из текста. А затем уже получаем все атрибуты для конкретного изображения и данные по изображению помещаем в массив.
А потом уже для каждого изображения делаем подмену в детальном тексте
Назад в раздел
Подписаться на новые материалы раздела: