Пожалуйста распишите как реализовать по шагово, бьюсь второй день ничего не получается
Вначале создадим файл скрипта, например MYscript.js (по другому AJAX JSON скрипты не парсят и не передают), туда пихаем скрипт галереи
jQuery(function() {
jQuery("a.lightbox_attr").lightBox({
imageLoading: "/images/loading.gif",
imageBtnClose:"/images/close.gif",
imageBtnPrev: "/images/prev.gif",
imageBtnNext: "/images/next.gif"
});
jQuery("a.lightbox_attr").click(function(){
var rel = $(this).attr("rel");
x=document.getElementById(rel).click();
});
});
lightbox_attr класс для сылки атрибута который будем увеличивать.
второй шаг, перепишем скрипт аджакс обновления атрибутов, файл functions.js в каталоге /js/ , находим function reloadAttribSelectAndPrice(id_select) и там меняем
это
prevAjaxHandler = jQuery.getJSON(
urlupdateprice,
data,
function(json){
var reload_atribut = 0;
for(var i=0;i<attr_list.length;i++){
var id = attr_list[i];
if (reload_atribut){
jQuery("#block_attr_sel_"+id).html(json['id_'+id]);
}
if (id == id_select) reload_atribut = 1;
}
на это, там разница в 2ух строчках, главное следите за путем к вашему скрипту с галереей, у меня скрипт в корне/js/, т.е. src=\"/js/lbmot.js\"
prevAjaxHandler = jQuery.getJSON(
urlupdateprice,
data,
function(json){
var reload_atribut = 0;
for(var i=0;i<attr_list.length;i++){
var id = attr_list[i];
if (reload_atribut){
val = "<script type=\"text/javascript\" src=\"/js/lbmot.js\"></script>"+json['id_'+id]; /*путь в крень*/
jQuery("#block_attr_sel_"+id).html(val);
}
if (id == id_select) reload_atribut = 1;
}
ну и третье, добавим в шаблон HTML отображения этих атрибутов, летим в components\com_jshopping\controllers\product.php, там ищем "// attribut type radio" и меняем этот обработчик foreach($options as $k2=>$v2){ ..... } на свой собственный:
// attribut type radio
foreach($options as $k2=>$v2){
if ($v2->image) $options[$k2]->value_name = "<img class='imgattr' src='".$jshopConfig->image_attributes_live_path."/thumb_".$v2->image."' /><a class=\"lightbox_attr\" href='".$jshopConfig->image_attributes_live_path."/".$v2->image."' rel=\"jshop_attr_id{$attr_id}{$v2->val_id}\"></a> ".$v2->value_name;
}
тут наш класс lightbox_attr, и rel=\"jshop_attr_id{$attr_id}{$v2->val_id}\" это id атрибута который разворачиваем, href='".$jshopConfig->image_attributes_live_path."/".$v2->image."' - ссылка до разворачиваемой картинки....
Т.к. атрибутов много, у меня до 50 материалов может быть, а картинки, разворачиваемые, могут быть большими, то страничка стала весить до 3-4Мб, что не приемлемо. Пришлось ковырять админ часть компонента и делать "тумбочки" для фоток атрибута src='".$jshopConfig->image_attributes_live_path."/thumb_".$v2->image."' />, таким образом на страницу грузятся тумбочки, страница весит всего пару сотен килобайт, а полно размерные грузятся при клике.
Итак дописываем админку для тумбочек атрибутов, бегом в \administrator\components\com_jshopping\controllers\attributesvalues.php :
дописываем function save() {..часть с if ($upload->upload()){}..} до такого вида, тут видно где появились thumb_
......
if ($upload->upload()){
if ($post['old_image']){
@unlink($jshopConfig->image_attributes_path . "/" . $post['old_image']);
@unlink($jshopConfig->image_attributes_path . "/thumb_" . $post['old_image']);
}
$post['image'] = $upload->getName();
@chmod($jshopConfig->image_attributes_path."/".$post['image'], 0777);
/*my creat thumb*/
$path_image = $jshopConfig->image_attributes_path."/".$post['image'];
$path_thumb = $jshopConfig->image_attributes_path."/thumb_".$post['image'];
if (!ImageLib::resizeImageMagic($path_image, /*width*/ 90, /*height*/ 0, /*image_cut кадрировать*/1, /*image_fill заполнение*/0, $path_thumb, /*image_quality*/80, /*image_fill_color*/0)) {
JError::raiseWarning("",_JSHOP_ERROR_CREATE_THUMBAIL);
$error = 1;
}
@chmod($path_thumb, 0777);
/*my end creat thumb*/
}else{
...
это было сохранение, теперь если мы удаляем атрибут, вызов функции делаем таким:
function remove(){
$cid = JRequest::getVar("cid");
$attr_id = JRequest::getInt("attr_id");
$jshopConfig = &JSFactory::getConfig();
$db = &JFactory::getDBO();
JPluginHelper::importPlugin('jshoppingadmin');
$dispatcher =& JDispatcher::getInstance();
$dispatcher->trigger( 'onBeforeRemoveAttributValue', array(&$cid) );
$text = '';
foreach ($cid as $key => $value){
$query = "SELECT image FROM `#__jshopping_attr_values` WHERE value_id = '" . $db->getEscaped($value). "'";
$db->setQuery($query);
$image = $db->loadResult();
@unlink($jshopConfig->image_attributes_path."/".$image);
@unlink($jshopConfig->image_attributes_path."/thumb_".$image);
$query = "DELETE FROM `#__jshopping_attr_values` WHERE `value_id` = '" . $db->getEscaped($value). "'";
$db->setQuery($query);
$db->query();
$text = _JSHOP_ATTRIBUT_VALUE_DELETED;
}
$dispatcher->trigger( 'onAfterRemoveAttributValue', array(&$cid) );
$this->setRedirect("index.php?option=com_jshopping&controller=attributesvalues&attr_id=".$attr_id, $text);
}
тут одна строчка с thumb, и если админ удаляет просто фото, то вызывается функция
function delete_foto(){
$jshopConfig = &JSFactory::getConfig();
$id = JRequest::getInt("id");
$attributValue = &JTable::getInstance('attributValue', 'jshop');
$attributValue->load($id);
@unlink($jshopConfig->image_attributes_path."/".$attributValue->image);
@unlink($jshopConfig->image_attributes_path."/thumb_".$attributValue->image);
$attributValue->image = "";
$attributValue->store();
die();
}
тут тоже видим удаление и нормальной фотки и тумбочки....
На этом вроде все....кто хочет потестить, то сюда
http://mebel.lica-pskova.ru/index.php/product/view/36/11Более сложно было сделать такое желание заказчика
http://mebel.lica-pskova.ru/index.php/kitchenfur/tov1,
человек покупая кухню 3-х метровую выбирает цвет, столешницу, фасады, но ему еще нужны шкафы от этой кухни т.к. кухня 3,5метра, он щелкает корзину+докупить модули, и попадает на список модулей с УЖЕ выбранными атрибутами и пересчитанной ценой за отдельные шкафы, и может докупить, в корзину формируется заказ с атрибутами и всей кухни и выбранными атрибутами для выбранных элементов кухни....а то юзеры "скажем глуповаты" и сейчас у них в старом магазине, заказы приходят на кухню одного цвета, а доп шкафы вообще других цветов и форматов....