В InstantCMS при редактировании страниц, постов и записей не в административной части сайта используется панель BBкодов, но у нее очень ограниченный функционал. Хотя на самом деле функционал присутствует, но разработчики упустили из виду один момент.
Вся обработка BBкодов происходит при сохранении материала, в файле bbcode.lib.php, расположенном в директории /includes/bbcode/.
Обработчиком BBкода IMG выступает функция img_2html.
Обтекание текстом задается атрибутом align, то есть для задания изображения с обтеканием используется такая конструкция:
[ IMG align=left ]путь к изображению[ /IMG ]
В функции img_2html есть строки для задания выравнивания:
if (isset($elem['attrib']['align'])){ $align = $this->cleanAttrValue($elem['attrib']['align']); $div_style = "float:".$align.";overflow:hidden;"; $div_style .= "margin-" .($align=='left' ? 'right' : 'left'). ":15px; margin-bottom:10px; "; }
Вся проблема в том, что при изменении размера изображения этот стиль не применяется, а размер изменяется если изображение шириной или высотой больше 340 пикселей.
Итак, как же это исправить? Легко, просто добавить $div_style в строку:
$html = '<div class="forum_zoom" style="width:'.$width.'px;">'."";
Получим:
$html = '<div class="forum_zoom" style="width:'.$width.'px;'.$div_style.'">'."";
Также просто можно добавить и атрибут alt для изображения, сначала заменим:
$attr = 'alt=""';
следующим:
$alt = $this->cleanAttrValue($elem['attrib']['alt']); $attr = 'alt="'.$alt.'"';
Далее, для правильного задания атрибута alt нужно заменить строку:
$html .= '<div><a href="'.$src.'""><img src="'.$src.'" '.$this->cleanAttrValue($attr).' width="'.$width.'" height="'.$height.'" border="0"/></a></div>'."";
Меняем на:
$html .= '<div><a href="'.$src.'"" rel="lightbox"><img src="'.$src.'" '.$attr.' width="'.$width.'" height="'.$height.'" border="0"/></a></div>'." ";
Ну и в дополнение там же подключен lightbox (rel="lightbox")
Все довольно просто, также можно и добавить свои примочки другим BBкодам.