Ответить Новая тема Новый опрос 
Всего: 3 1 2 3 >
 Подсказки по ценам
LBT2


Новичок
Сообщений: 65
Откуда: Запорожье
Регистрация: 18-01-2011


24-02-2011 22:00
Решил сделать подсказки по ценам.

При наведении на нее вывести табличку с возможными вариациями товара и ценами.

Подискал неплохоую js`ку jTip

только столкунулся с проблемой, при внесении всех файлов в престу, и проверки тестового шаблона, все работает, а вот при внедрении кода в тпл файл не идут GET запросы на нужный скрипт =(

Если кто заинтересован в данном функционале, помогите плиз.


Код:
<a href="http://site.com/try.php?width=475" class="jTip" id="one" name="Window caption or title">{if !$priceDisplay}{convertPrice price=$product.price}{else}{convertPrice price=$product.price_tax_exc}{/if}</a>


это 43й лайн Продукт PHP

CSS типов заинклюдил в global.css

js положил в папку с темой и сделал прямой линк.

Файр баг на тестовой страничке показывает как резво бегают GET. У меня же в каталоге повторюсь никакой реакции не было со стороны браузера(

Непосредственно js lib в аттаче


Сообщение отредактировано LBT2 24-02-2011 23:00 ...


Вложения:

Вложения jTip.zip( Размер файла: 56.15KB Скачиваний: 147 )
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
LBT2


Новичок
Сообщений: 65
Откуда: Запорожье
Регистрация: 18-01-2011


25-02-2011 00:48
Вывел jTip

оказывается ошибка заключалась в том что я линки на js указал в header.tpl

теперь с доругой проблемой столкнулся, а именно позиционирование этого самого всплывающего окна.

перепробовал уже всё, оно всеравно остается наместе... либо уползает в низ так что видно только кусочек маленький(....
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
ktkt
Cпециалист
Сообщений: 205
Регистрация: 20-10-2010


25-02-2011 14:48
Такой модуль бы пригодился. А то не знаю куда вывести подсказки типа (Купи 2 и получи скидку итп)
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
Brankub


Новичок
Сообщений: 26
Регистрация: 13-11-2010


25-02-2011 16:50
По поводу позиционирования - было бы неплохо приложить скриншот.
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
LBT2


Новичок
Сообщений: 65
Откуда: Запорожье
Регистрация: 18-01-2011


25-02-2011 23:48
Вообщем что на данный момент имеем, разобрался с позиционированием.

Дело в том что данный скрипт привязывает всплывающие окна к linkID который нужно указывать в ручную.

в аттаче исправленный js. который выводит непосразственно напротив курсора подсказку.

Теперь о реализации скрипта который будет смотреть в атрибуты товара.

У меня пока получилось вот что.
Код:
$hostname = "";
$username = "";
$password = "";
$dbName = "";
MYSQL_CONNECT($hostname,$username,$password) OR DIE("Не могу создать соединение ");

@mysql_select_db("$dbName") or die("Не могу выбрать базу данных ");

$x=0;

//Получаем ID
$id=htmlspecialchars($_GET["id_product"]);

//Название товара
$namequery = "SELECT name FROM ps_product_lang WHERE id_product = $id AND id_lang = 1";
$nameres = mysql_query($namequery) or die(mysql_error());

//Цена товара
$pricequery = "SELECT price FROM ps_product WHERE id_product = $id";
$priceres = mysql_query($pricequery) or die(mysql_error());

//Курс Валют
$curquery = "SELECT conversion_rate FROM ps_currency WHERE iso_code = 'UAH'";
$curres = mysql_query($curquery) or die(mysql_error());

$prod_attr= "SELECT id_product_attribute,price FROM ps_product_attribute WHERE id_product = $id";
$prod_attr_res=mysql_query($prod_attr) or die("oops");
$x=0;
while ($row = mysql_fetch_array($prod_attr_res))
    {
        $prod_attr_id[$x]=$row['id_product_attribute'];
        $prod_attr_pr[$x]=$row['price'];
        $x++;
    }
    
for($i=0; $i<sizeof($prod_attr_id); $i++)
    echo $prod_attr_id[$i]."<br>";
    
for($i=0; $i<sizeof($prod_attr_pr); $i++)
    echo $prod_attr_pr[$i]."<br>";



//$patidgrquery = "SELECT id_attribute_group FROM ps_attribute WHERE id_attribute = $patid";
//$patidgrres = mysql_query($patidgrquery) or die(mysql_error());

//Переменные цены/имени/кураса
$name = mysql_fetch_array($nameres);
$price = mysql_fetch_array($priceres);
$cur = mysql_fetch_array($curres);



Дальше ступор... в php я совсем не силен, нужно согласно данным массива ID атрибутов найти Названия и значения этих самых атрибутов...

В аттач ложу исправленный js

За позиционирование отвечает несколько строк но именно за "не статичность"

41 строка
Код:
$('#JT').css({left: clickElementx+"px", top: window.event.y -10 +"px"});



Также приложу скриншотец.
http://dropmocks.com/mRqM5

Дизайн доработаю, это не проблема. А вот еслиб кто с кодом помог было бы хорошо)
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
LBT2


Новичок
Сообщений: 65
Откуда: Запорожье
Регистрация: 18-01-2011


25-02-2011 23:50
Вот и скрипт, по каким-то причинам не получилось прикрепить как в ложение

jtip.js это чтоб ничего не напутали.

Код:
/*
* JTip
* By Cody Lindley (http://www.codylindley.com)
* Under an Attribution, Share Alike License
* JTip is built on top of the very light weight jquery library.
*/

//on page load (as soon as its ready) call JT_init
$(document).ready(JT_init);

function JT_init(){
           $("a.jTip")
           .hover(function(){JT_show(this.href,this.id,this.name)},function(){$('#JT').remove()})
           .click(function(){return false});      
}

function JT_show(url,linkId,title){
    if(title == false)title="&nbsp;";
    var de = document.documentElement;
    var w = self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth;
    var hasArea = w - getAbsoluteLeft(linkId);
    var clickElementy = getAbsoluteTop(linkId); //set y position
    
    var queryString = url.replace(/^[^\?]+\??/,'');
    var params = parseQuery( queryString );
    if(params['width'] === undefined){params['width'] = 450};
    if(params['link'] !== undefined){
    $('#' + linkId).bind('click',function(){window.location = params['link']});
    $('#' + linkId).css('cursor','pointer');
    }
    
    if(hasArea>((params['width']*1)+75)){
        $("body").append("<div id='JT' style='width:"+params['width']*1+"px'><div id='JT_arrow_left'></div><div id='JT_close_left'>"+title+"</div><div id='JT_copy'><div class='JT_loader'><div></div></div>");//right side
        var arrowOffset = getElementWidth(linkId) + 11;
        var clickElementx = getAbsoluteLeft(linkId) + arrowOffset; //set x position
    }else{
        $("body").append("<div id='JT' style='width:"+params['width']*1+"px'><div id='JT_arrow_right' style='left:"+((params['width']*1)+1)+"px'></div><div id='JT_close_right'>"+title+"</div><div id='JT_copy'><div class='JT_loader'><div></div></div>");//left side
        var clickElementx = getAbsoluteLeft(linkId) - ((params['width']*1) + 56); //set x position
    }
    
    $('#JT').css({left: clickElementx+"px", top: window.event.y -10 +"px"});
    $('#JT').show();
    $('#JT_copy').load(url);

}

function getElementWidth(objectId) {
    x = document.getElementById(objectId);
    return x.offsetWidth;
}

function getAbsoluteLeft(objectId) {
    // Get an object left position from the upper left viewport corner
    o = document.getElementById(objectId)
    oLeft = o.offsetLeft            // Get left position from the parent object
    while(o.offsetParent!=null) {   // Parse the parent hierarchy up to the document element
        oParent = o.offsetParent    // Get parent object reference
        oLeft += oParent.offsetLeft // Add parent left position
        o = oParent
    }
    return oLeft
}

function getAbsoluteTop(objectId) {
    // Get an object top position from the upper left viewport corner
    o = document.getElementById(objectId)
    oTop = o.offsetTop            // Get top position from the parent object
    while(o.offsetParent!=null) { // Parse the parent hierarchy up to the document element
        oParent = o.offsetParent  // Get parent object reference
        oTop += oParent.offsetTop // Add parent top position
        o = oParent
    }
    return oTop
}

function parseQuery ( query ) {
   var Params = new Object ();
   if ( ! query ) return Params; // return empty object
   var Pairs = query.split(/[;&]/);
   for ( var i = 0; i < Pairs.length; i++ ) {
      var KeyVal = Pairs[i].split('=');
      if ( ! KeyVal || KeyVal.length != 2 ) continue;
      var key = unescape( KeyVal[0] );
      var val = unescape( KeyVal[1] );
      val = val.replace(/\+/g, ' ');
      Params[key] = val;
   }
   return Params;
}

function blockEvents(evt) {
              if(evt.target){
              evt.preventDefault();
              }else{
              evt.returnValue = false;
              }
}
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
LBT2


Новичок
Сообщений: 65
Откуда: Запорожье
Регистрация: 18-01-2011


26-02-2011 00:01
Вообщем что на данный момент имеем, разобрался с позиционированием.

Дело в том что данный скрипт привязывает всплывающие окна к linkID который нужно указывать в ручную.

в аттаче исправленный js. который выводит непосразственно напротив курсора подсказку.

Теперь о том как будем передавать ID товара скрипту.

для начала нужно открыть product_list.tpl и добавить туда
Код:
<script type=\"text/javascript\" src=\"http://Название-сайта/themes/Название-Темы/js/jtip.js\"></script>
<style type=\"text/css\" media=\"all\">
@import \"http://Название-сайта/themes/Название-Темы/css/jtip.css\";
</style>


это первое, и второе.

Этот код
Код:
{if !$priceDisplay}{convertPrice price=$product.price}

Заменить на этот
Код:
<a href=\"http://Название-сайта/themes/Название-Темы/price-tip.php?add&id_product={$product.id_product|intval}\" name=\"Заголовок\" id=\"\" class=\"jTip\">{if !$priceDisplay}{convertPrice price=$product.price}</a>


Не забудьте внести коррективы! пути желательно указывать полностью во избежании проблем с mod_rewrite!

Далее Создаем тот самый price-tip.php в каталоге с вашей темой.

И в нем уже пишем произвольный код, я непозредственно заинтересован в том чтобы развивать именно подсказки по ценам атрибутов.

У меня пока получилось вот что.
Код:
$hostname = \"\";
$username = \"\";
$password = \"\";
$dbName = \"\";
MYSQL_CONNECT($hostname,$username,$password) OR DIE(\"Не могу создать соединение \");

@mysql_select_db(\"$dbName\") or die(\"Не могу выбрать базу данных \");

$x=0;

//Получаем ID
$id=htmlspecialchars($_GET[\"id_product\"]);

//Название товара
$namequery = \"SELECT name FROM ps_product_lang WHERE id_product = $id AND id_lang = 1\";
$nameres = mysql_query($namequery) or die(mysql_error());

//Цена товара
$pricequery = \"SELECT price FROM ps_product WHERE id_product = $id\";
$priceres = mysql_query($pricequery) or die(mysql_error());

//Курс Валют
$curquery = \"SELECT conversion_rate FROM ps_currency WHERE iso_code = \'UAH\'\";
$curres = mysql_query($curquery) or die(mysql_error());

$prod_attr= \"SELECT id_product_attribute,price FROM ps_product_attribute WHERE id_product = $id\";
$prod_attr_res=mysql_query($prod_attr) or die(\"oops\");
$x=0;
while ($row = mysql_fetch_array($prod_attr_res))
    {
        $prod_attr_id[$x]=$row[\'id_product_attribute\'];
        $prod_attr_pr[$x]=$row[\'price\'];
        $x++;
    }
    
for($i=0; $i<sizeof($prod_attr_id); $i++)
    echo $prod_attr_id[$i].\"<br>\";
    
for($i=0; $i<sizeof($prod_attr_pr); $i++)
    echo $prod_attr_pr[$i].\"<br>\";



//$patidgrquery = \"SELECT id_attribute_group FROM ps_attribute WHERE id_attribute = $patid\";
//$patidgrres = mysql_query($patidgrquery) or die(mysql_error());

//Переменные цены/имени/кураса
$name = mysql_fetch_array($nameres);
$price = mysql_fetch_array($priceres);
$cur = mysql_fetch_array($curres);



Дальше ступор... в php я совсем не силен, нужно согласно данным массива ID атрибутов найти Названия и значения этих самых атрибутов...

В аттач ложу исправленный js

За позиционирование отвечает несколько строк но именно за \"не статичность\"

41 строка
Код:
$(\'#JT\').css({left: clickElementx+\"px\", top: window.event.y -10 +\"px\"});



Также приложу скриншотец.
http://dropmocks.com/mRqM5

Дизайн доработаю, это не проблема. А вот еслиб кто с кодом помог было бы хорошо)
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
LBT2


Новичок
Сообщений: 65
Откуда: Запорожье
Регистрация: 18-01-2011


26-02-2011 00:03
5й пост не читаем!

Читаем 7й потом 6й!

Сори за каламбур
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
ktkt
Cпециалист
Сообщений: 205
Регистрация: 20-10-2010


26-02-2011 03:32
ЧТо-то скриншот никак не смотрится
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
ors
Профессионал
Сообщений: 1885
Регистрация: 09-11-2009


26-02-2011 12:14
Все то же самое, только короче (пути к config.inc.php на свои поменяйте):
Код:
include(dirname(__FILE__).'/config/config.inc.php');
include(dirname(__FILE__).'/init.php');
$product=new Product(Tools::GetValue['id_product']);
$attributesGroups = $product->getAttributesGroups((int)($cookie->id_lang));
$combinations=array();
if ($attributesGroups){
    foreach ($attributesGroups AS $k => $row)
    {
        $combinations[$row['id_product_attribute']]['attributes_values'][$row['id_attribute_group']] = $row['attribute_name'];
        $combinations[$row['id_product_attribute']]['attributes'][] = intval($row['id_attribute']);
        $combinations[$row['id_product_attribute']]['price'] = floatval($row['price']);
    }

В массиве $combinations будет все что нужно.
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
Ответить Новая тема Новый опрос 
Всего: 3 1 2 3 >