Хак «из тумбы в лайтбокс»
Слишком часто натыкаюсь на форуме на вопрос как сделать вывод изображения сразу в лайтбокс из тумбы (малой превьюшки)
Этот вопрос я решел реализовать в своей сборке DG и вот что получилось:
Файл admin. datsogalery.php
После строк:
echo "<td align=\"left\" valign=\"top\"><strong>" . _DG_USE_PATHWAY . "</strong></td>\n";
echo "<td align=\"left\" valign=\"top\">";
$yn_ad_pathway = JHTML::_('select.genericlist', $yesno, 'ad_pathway', 'class="inputbox"', 'value', 'text', $ad_pathway);
echo $yn_ad_pathway;
echo "</td>\n";
echo "<td align=\"left\" valign=\"top\">" . dgTip(_DG_USE_PATHWAY_I). "</td>\n";
echo "</tr>\n";
Добавил:
//////////////////////////////////////////////////////////
echo "<tr align=\"left\" valign=\"middle\">\n";
echo "<td align=\"left\" valign=\"top\"> </td>\n";
echo "<td align=\"left\" valign=\"top\"> </td>\n";
echo "<td align=\"left\" valign=\"top\"> </td>\n";
echo "</tr>\n";
//Открывать изображение сразу в LiteBox
echo "<tr align=\"left\" valign=\"middle\">\n";
echo "<td align=\"left\" valign=\"top\"><strong>" . _DG_IMAGES_GO_LITEBOX . "</strong></td>\n";
echo "<td align=\"left\" valign=\"top\">";
$yn_ad_images_go_litebox = JHTML::_('select.genericlist', $yesno, 'ad_images_go_litebox', 'class="inputbox"', 'value', 'text', $ad_images_go_litebox);
echo $yn_ad_images_go_litebox;
echo "</td>\n";
echo "<td align=\"left\" valign=\"top\">" . dgTip(_DG_IMAGES_GO_LITEBOX_I). "</td>\n";
echo "</tr>\n";
//ставить значек перехода в среднй размер
echo "<tr align=\"left\" valign=\"middle\">\n";
echo "<td align=\"left\" valign=\"top\"><strong>" . _DG_IMAGES_GO_MEDBOX . "</strong></td>\n";
echo "<td align=\"left\" valign=\"top\">";
$yn_ad_images_go_medbox = JHTML::_('select.genericlist', $yesno, 'ad_images_go_medbox', 'class="inputbox"', 'value', 'text', $ad_images_go_medbox);
echo $yn_ad_images_go_medbox;
echo "</td>\n";
echo "<td align=\"left\" valign=\"top\">" . dgTip(_DG_IMAGES_GO_MEDBOX_I). "</td>\n";
echo "</tr>\n";
//Увеличенные картинки в категории
echo "<tr align=\"left\" valign=\"middle\">\n";
echo "<td align=\"left\" valign=\"top\"><strong>" . _DG_SHOW_IMG_IN_CAT . "</strong></td>\n";
echo "<td align=\"left\" valign=\"top\">";
$yn_ad_showimg_in_cat = JHTML::_('select.genericlist', $yesno, 'yn_ad_showimg_in_cat', 'class="inputbox"', 'value', 'text', $yn_ad_showimg_in_cat);
echo $yn_ad_showimg_in_cat;
echo "</td>\n";
echo "<td align=\"left\" valign=\"top\">" . dgTip(_DG_SHOW_IMG_IN_CAT_I). "</td>\n";
echo "</tr>\n";
//////////////////////////////////////////////////////////
echo "<tr align=\"left\" valign=\"middle\">\n";
echo "<td align=\"left\" valign=\"top\"> </td>\n";
echo "<td align=\"left\" valign=\"top\"> </td>\n";
echo "<td align=\"left\" valign=\"top\"> </td>\n";
echo "</tr>\n";
/////////////////////////////////////////////////////////
Сие означает появление в админке->настройках на вкладке опции трех дополнительных параметров.
А именно:
1. Выводить изображение из категории в лайтбокс
2. Выводить значек на превью, для перехода на средний размер (эта вещь заложена с целью таки выводить средний размер картинки. Зачем ограничивать юзера в возможности просмотра дополнительной информации к изображению)
3. Выводить увеличенные картинки в разделе (это небольшой хак для того что бы хоть как то укрупнить картинку до щелчка мыши)
Далее после строки:
$config .= "\$ad_comtitle = \"" . JRequest::getVar('ad_comtitle', 0, 'post', 'int'). "\";\n";
Добавил вот это:
$config .= "\$ad_images_go_litebox = \"" . JRequest::getVar('ad_images_go_litebox', 0, 'post', 'int'). "\";\n";
$config .= "\$ad_images_go_medbox = \"" . JRequest::getVar('ad_images_go_medbox', 0, 'post', 'int'). "\";\n";
$config .= "\$yn_ad_showimg_in_cat = \"" . JRequest::getVar('yn_ad_showimg_in_cat', 0, 'post', 'int'). "\";\n";
С этим файлом все.
Теперь беремся за файл dgstyle.css и добавляем в нем:
.dg_gr_img_go_med {
/*border-width:1px;
border-style:solid;
border-color:#D3D3D3;*/
padding:2px;
margin:10px;
width: 16px;
height: 16px;
position: absolute;
}
В #dhtmltooltip комментим строку: width: 100%;
Идем далее.
Файл datsogalery.php
В начале файла, где идет описание инклудов и яваскрипт
$javascript .= "<link rel=\"stylesheet\" href=\"" . JURI::base(). "components/com_datsogallery/css/dgstyle.css\" type=\"text/css\" />\n";
добавляем вот это
if ($ad_lightbox) {
$javascript .= "<script type='text/javascript' src='" . JURI::base(). "components/com_datsogallery/libraries/clearbox/js/clearbox.js'></script>\n";
$javascript .= "<link rel='stylesheet' href='" . JURI::base(). "components/com_datsogallery/libraries/clearbox/css/clearbox.css' type='text/css' />\n";
$javascript .= "<script type='text/javascript'>
var
CB_PicDir='" . JURI::base(). "components/com_datsogallery/libraries/clearbox/pic/',
CB_NavTextClose='" . _DG_CB_CLOSE . "'
;
</script>\n";
}
Затем банально заменяем этот код
$dghits = _DG_HITS;
$dgvotes = _DG_RATING;
$dgcomment = _DG_COMMENT1;
$tle = jsspecialchars($row1->imgtitle);
echo "<a href='" . JRoute::_("index.php?option=com_datsogallery&func=detail&catid=$catid&id=$row1->id&Itemid=" . $Itemid). "'";
echo "onmouseover=\"showttip('";
echo "<strong>$tle</strong>";
if ($ad_showimgcounter > 0) {
echo "<br />$dghits: $row1->imgcounter";
}
if ($ad_showrating > 0) {
echo "<br />$dgvotes: $frating ";
}
if ($ad_showcomment > 0) {
echo "<br />$dgcomment : $comments";
}
echo "');\"";
echo "onmouseout=\"hidettip();\"><img src='$thumbnailpath$row1->imgthumbname' id='dg-image' alt='" . $tle . "' /></a><br />";
На вот такой код:
$dghits = _DG_HITS;
$dgvotes = _DG_RATING;
$dgcomment = _DG_COMMENT1;
$tle = jsspecialchars($row1->imgtitle);
$stringinfobox= "<strong>".$tle."</strong /><br />";
$pathimages1 = JURI::base(). $ad_pathimages . "/";
if ($ad_showimgcounter > 0)
{
$stringinfobox.=$dghits.": ".$row1->imgcounter."<br />";
}
if ($ad_showrating > 0)
{
$stringinfobox.= $dgvotes.":". $frating ."<br />";
}/**/
if ($ad_showcomment > 0)
{
$stringinfobox.= $dgcomment.":". $comments ."<br />";
}
$FlPublished = intval($row1->published1);
///////////////////////////////////////////////////////
//Вывод на лайтбокс сразу из категории
$dg_s_c_return = "<div style='position: static; max-width: ".$ad_thumbwidth."px; max-hight:".$ad_thumbheight."px;'>";
if ($ad_images_go_litebox)
{
$dg_s_c_return .= '<div class="dg_gr_img_go_med">';
if ($ad_images_go_medbox)
{
$dg_s_c_return .= "<a href='" . JRoute::_("index.php?option=com_datsogallery&func=detail&catid=$catid&id=$row1->id&Itemid=" . $Itemid). "#img_med' ";
if ($yn_ad_showimg_in_cat)
{
$dg_s_c_return .= "onmouseover=\"showInfo('".$stringinfobox."','".$pathimages1.$row1->imgthumbname."')\" onmouseout=\"hidettip();\" ";
}
$dg_s_c_return .= ">";
$dg_s_c_return .= '<img src="'.JURI::base().'components/com_datsogallery/images/dg-info-icon.png" width="16" height="16" />';
$dg_s_c_return .= "</a>";
}
$dg_s_c_return .= '</div>';
if($ad_lightbox_fa)
{
$dg_s_c_return .= "<div >\n";
$img_med_title = jsspecialchars($imgtitle);
$dg_s_c_return .= "<a rel=\"clearbox\" href=\"". $wm ."oid=". $row1->id ."\" title=\"". $img_med_title ."\" onmouseover=\"removeAttribute(\"title\");showttip(\"". _DG_VIEW_ORG_IMAGE."\");\"\n";
$dg_s_c_return .= "onmouseout=\"hidettip();\"><img src=\"".$thumbnailpath.$row1->imgthumbname."\" class=\"imgxy\" name=\"SlideShow\" id=\"dg-image\"\n";
$dg_s_c_return .= "alt=\"". $imgtitle."\" /></a>";
$dg_s_c_return .= "<div id='ImgText' style='padding-top:5px;font-size:16px;'></div>\n";
$dg_s_c_return .= "</div>\n";
}
}
else
{
$dg_s_c_return .= "<a href='" . JRoute::_("index.php?option=com_datsogallery&func=detail&catid=$catid&id=$row1->id&Itemid=" . $Itemid). "#img_med' ";
if ($yn_ad_showimg_in_cat)
{
$dg_s_c_return .= "onmouseover=\"showInfo('".$stringinfobox."','".$pathimages1.$row1->imgthumbname."')\" onmouseout=\"hidettip();\" ";
}
$dg_s_c_return .= ">";
$dg_s_c_return .= "<img src='".$thumbnailpath.$row1->imgthumbname."' id='dg-image' alt='" . $tle . "' />";
$dg_s_c_return .= "</a>";
}
$dg_s_c_return .= "</div>";
echo $dg_s_c_return;
после строки
нужно добавить
$wm = JURI::base(). "index2.php?option=com_datsogallery&func=wmark";
$wm = str_replace("&", "&", $wm). "&";
после строки
echo "</tr>\n</table>\n";
добавляем
$dg_s_c_return = "<script type=\"text/javascript\"> \n";
$dg_s_c_return .= " function showInfo(title, name, dimensions) {\n";
$dg_s_c_return .= " HTML = '<div style=\"width:100%;text-align:center;vertical-align:middle;\">'+title+'<img style=\"border:1px solid Beige; margin:20px\" src='+name+' name=\"imagelib\" alt=\"No Pics\" height=\"250\"/></div>';\n";
$dg_s_c_return .= " showttip(html)\n";
$dg_s_c_return .= " }\n";
$dg_s_c_return .= "</script> \n";
echo $dg_s_c_return;
В языковом файле добавляем :
DEFINE('_DG_IMAGES_GO_LITEBOX', 'Выводить изображение из категории в лайтбокс');
DEFINE('_DG_IMAGES_GO_LITEBOX_I', 'Выводить изображение из категории в лайтбокс,<br /> не открывая средний размер');
DEFINE('_DG_IMAGES_GO_MEDBOX', 'Выводить значек на превью, для перехода на средний размер');
DEFINE('_DG_IMAGES_GO_MEDBOX_I', 'Выводить значек перехода на средний размер.<br /> Для включенного режима "Выводить изображение из категории в лайтбокс". ');
DEFINE('_DG_SHOW_IMG_IN_CAT_I', 'В категории выводится увеличенный<br /> эскиз при наведении на картинку.');
DEFINE('_DG_SHOW_IMG_IN_CAT', 'Выводить увеличенные картинки в разделе:');
Пробуем, эксперементируем, радуемся….
Просмотреть результат мона на моем сайте…
номера строк не привожу, так как это уже реализовано в моем модуле следующего релиза сборки...
И самое главное...Для перехода по картинкам в лайтбоксе пропишите вот так:
$dg_s_c_return .= "<a rel=\"clearbox[roadtrip]\" href=\"". $wm ."oid=". $row1->id ."\" title=\"". $img_med_title ."\" onmouseover=\"removeAttribute(\"title\");showttip(\"". _DG_VIEW_ORG_IMAGE."\");\"\n";
в замен строки:
$dg_s_c_return .= "<a rel=\"clearbox\" href=\"". $wm ."oid=". $row1->id ."\" title=\"". $img_med_title ."\" onmouseover=\"removeAttribute(\"title\");showttip(\"". _DG_VIEW_ORG_IMAGE."\");\"\n";
и будет вам
красивый переход туда и обратно, и
каруселька (скорость прокрутки наверное настраивается в clearbox.js)....
Вот такой фокИс....