Новости Joomla

0 Пользователей и 1 Гость просматривают эту тему.
  • 8 Ответов
  • 6611 Просмотров
*

flashinfo

  • Новичок
  • 6
  • 1 / 0
Искал долго решение этого вопроса, но как-то все кусками...  :laugh:
Пришлось собирать по частям самому и допиливать *DRINK* JS рулит   ;D

В итоге получилось такое:

Правим 3 файла : addtocart_advanced_attribute.tpl, quantity_box_general.tpl, flypage_new.tpl

Для flypage_new.tpl :

Добавляем это в начало где-то после 3-й строчки

Код
<script type="text/javascript">

 function strNum(x) {
     var r = "";
    for(var n=0; n<x.length; n++) {
      var base= x.charAt(n);
if(base!=' '&&(isNaN(base)==false||base==','))
   { r = r + base; } }
   return parseFloat(r.replace(/,/g,"."));
  }

  function strPrice(x) {
    x = x.toString();
    var y = x.charAt(0);
    for(var n=1; n<x.length; n++) {
      if ((Math.ceil((x.length-n)/3) == (x.length-n)/3)&(x.charAt(n)!=".")) {y = y + " ";}
      y = y + x.charAt(n);
    }
y=y+" "+valut;
     return y;
  }
 
function onclickButton(x, y) {
var kkt=document.getElementById('quantity'+ y).value;
var n=x.lastIndexOf("(");
var operand=x.slice(n+1,n+2);
var chislo=strNum(x.slice(n));
 var price=strNum(vmPrice);
 price=eval(price+operand+chislo);
price=price*kkt;
vmStr.innerHTML=  strPrice(price.toFixed(2));
}

function kolTov(x, y) {
var radios = document.getElementsByTagName('input');
for (var i = 0; i < radios.length; i++) {
   if (radios[i].type === 'radio' && radios[i].checked) {
var atrB=radios[i].value;
}}
var opti = document.getElementById(atrB).innerHTML;
onclickButton(opti, y);
}
</script>

И это в самый конец :
Код
<script type="text/javascript">
var vmStr= $('vmMainPage').getElement('.productPrice');
var vmPrice= vmStr.innerHTML;
var Baseprice = vmPrice;
var valut="";
var v=vmPrice.replace(/\d/g, "");
v=v.replace(/\s/g, "");
valut=v.replace(/,/g,""); //alert(v+"0");
</script>

Для addtocart_advanced_attribute.tpl :

Меняем полностью весь код на этот

Код
<?php if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' ); ?>

<?php
foreach($attributes as $attribute) {
    ?>
    <div class="vmAttribChildDetail" style="float: left;width:30%;text-align:right;margin:3px;">
        <label for="<?php echo $attribute['titlevar'] ?>_field"><?php echo $attribute['title'] ?></label>:
    </div>
    <div class="vmAttribChildDetail" style="float:left;width:60%;margin:3px;">
        
<?php  
foreach ( $attribute['options_list'] as $options_item ) : ?>
       <?php if( isset( $options_item['display_price']) ) : ?>
  <input type="radio" style="margin-top: 15px;" id="<?php echo $attribute['titlevar'] ?>_field" name="<?php echo $attribute['titlevar'].$attribute['product_id'] ?>" value="<?php echo $options_item['base_var'] ?>" onclick="onclickButton('(<?php echo $options_item['sign'].$options_item['display_price'] ?>)', <?php echo $attribute['product_id'];?>)"><?php echo $options_item['base_value'] ?> <span id="<?php echo $options_item['base_var'] ?>" style="display:none">(<?php echo $options_item['sign'].$options_item['display_price'] ?>)</span><br />
            <?php else : ?>
            <input type="radio" style="margin-top: 15px;" id="<?php echo $attribute['titlevar'] ?>_field" name="<?php echo $attribute['titlevar'].$attribute['product_id'] ?>" value="<?php echo $options_item['base_var'] ?>"><?php echo $options_item['base_value'] ?>
       <?php endif; ?>
        <?php endforeach; ?>

    </div>
    <br style="clear:both;" />
    
<?php
} ?>

Для quantity_box_general.tpl :

Ищем
Код
case "none" :
default:

Меняем в case все на этот код
Код
$html .= '<input type="text" class="inputboxquantity" size="4" id="quantity'.$prod_id.'" name="quantity[]" value="'.$quantity.'" />
<input type="button" class="quantity_box_button quantity_box_button_up" onclick="var qty_el = document.getElementById(\'quantity'.$prod_id.'\'); var qty = qty_el.value; if( !isNaN( qty )) qty_el.value++; kolTov(qty_el.value, '.$prod_id.'); return false;" />
<input type="button" class="quantity_box_button quantity_box_button_down" onclick="var qty_el = document.getElementById(\'quantity'.$prod_id.'\'); var qty = qty_el.value; if( !isNaN(qty)&qty > 1) qty_el.value--; kolTov(qty_el.value, '.$prod_id.'); return false;" />
';


Все наработки взяты из открытых источников :)

Атрибуты выводятся радио-кнопками, кол-во товара специально-принудительно сделано не меньше 1.

Вобщем, кому надо - ставьте и пользуйтесь! :)



--------------------------------------------------------------------------------------------------------------------------
Дополнительная информация по теме:  http://joomlaforum.ru/index.php/topic,276370.msg1378281.html#msg1378281
« Последнее редактирование: 26.09.2013, 16:29:24 от fsv »
*

varX

  • Живу я здесь
  • 2450
  • 141 / 5
  • разработка компонентов
Разработка и ремонт. VirtueMart. JoomShopping. Свои компоненты. Принимаю заявки на plasma-web.ru.
*

fsv

  • Moderator
  • 2765
  • 402 / 2
В итоге получилось такое: ...
Информация о магазине -> Стиль отображения валюты
В "символ валюты" могут присутствовать тэги (популярный хак с выводом символа рубля).
Десятичный разделитель и разделитель тысяч могут быть очень разными, а не только запятая/точка/пробел.
Формат отрицательного числа со знаком минус.
Это все у вас учтено?

Возможно, пригодится:
Код
var currency = "<?php echo $CURRENCY_DISPLAY->getSymbol()?>";  // символ валюты + очистить его еще от тэгов
var nbDecimal = "<?php echo $CURRENCY_DISPLAY->nbDecimal ?>";   // десятичный разделитель
var baseFullValue = "<?php echo $CURRENCY_DISPLAY->getFullValue(0)?>"; //цена 0(ноль) в формате, указ.в настройках магазина, можно использовать для последующей замены нуля в значении переменной на полученное новое значение цены; получим новую цену сразу в нужном формате
var separator = "<?php echo $CURRENCY_DISPLAY->thousands ?>" // разделитель тысяч из настроек магазина
Веб-разработка: заказ. Только новая объемная разработка. Качественно, дорого.
*

flashinfo

  • Новичок
  • 6
  • 1 / 0
Информация о магазине -> Стиль отображения валюты
В "символ валюты" могут присутствовать тэги (популярный хак с выводом символа рубля).
Десятичный разделитель и разделитель тысяч могут быть очень разными, а не только запятая/точка/пробел.
Формат отрицательного числа со знаком минус.
Это все у вас учтено?

Нет, не учитывал, мне и так подошло: между тысячами пробел, и разделитель копеек ","
+ сегодня немного изменил функцию KolTov:
Код
function kolTov(x, y) {
var radios = document.getElementsByTagName('input');
for (var i = 0; i < radios.length; i++) {
   if (radios[i].type === 'radio' && radios[i].checked) {
var atrB=radios[i].value;
var opti = document.getElementById(atrB).innerHTML;
onclickButton(opti, y);
                          return;
} }
var price=strNum(vmPrice);
price=price*x;
vmStr.innerHTML=  strPrice(price.toFixed(2));}

}

так динамически меняет цену если нет атрибутов у товара

посмотреть рабочий пример можно http://www.pavlodar.ipsys.net
« Последнее редактирование: 28.09.2013, 12:57:51 от flashinfo »
*

fsv

  • Moderator
  • 2765
  • 402 / 2
Нет, не учитывал, мне и так подошло
Не сомневаюсь, что вам подошло. Это частный случай. Но вы претендуете на "решение вопроса" ...
Если захотите, доработать не сложно...
Веб-разработка: заказ. Только новая объемная разработка. Качественно, дорого.
*

varX

  • Живу я здесь
  • 2450
  • 141 / 5
  • разработка компонентов
Цитировать
Нет, не учитывал, мне и так подошло

Это далеко не все, что нужно еще учитывать. Скрипт, который вы искаверкали, по мимо прочего, учитывает скидки на товар, работает с множеством товаров, если они на одной странице, не требует никакого вмешательства в код магазина, отлажен на более чем 600 сайтах, имеет полезный дополнительный функционал.

Это хорошо, что вы пытаетесь сделать что-то по своему, плохо, что при этом вы не указали источник, которым пользовались, и претендуете, как уже вам написал fsv на "решение", не имея на это оснований.

Цитировать
Если захотите, доработать не сложно...
Сложно.  Если, конечно, претендовать на "решение". Я приведу "почти полностью" скрипт из плагина VM DynamicPrice

Код: javascript
window.addEvent('domready', function() {
var quantity= $$('.inputboxquantity');
var quantity_button= $$('.quantity_box_button');
var Box=$$('.vmAttribChildDetail select');
var Boxopt=$$('.vmAttribChildDetail option');
var oldprice=$$('.product-Old-Price');
var BoxForm=$$('form.addtocart_form');

if(oldprice.length>0&&dynamic_rate==''||$$('.productPrice').length<1)return;
for(var n=0; n<Boxopt.length; n++) {
var addoptions=Boxopt[n].innerHTML;
var a=addoptions.lastIndexOf("(");
var hidetext=addoptions.slice(a-1);
Boxopt[n].title=addoptions;
if(dynamic_add=='1'){
var op=hidetext.slice(2,3);
if(op=='+'||op=='-'||op=='='){
Boxopt[n].innerHTML=addoptions.replace(hidetext,'');
}
}
}
Box.addEvent('change', function() {
sumBox2(getBoxPrice(this,'form'));
});
for(var n=0; n<oldprice.length; n++) {
oldprice[n].rel=oldprice[n].innerHTML;
}
for(var n=0; n<BoxForm.length; n++) {
var x=getBoxPrice(BoxForm[n],'.productPrice').innerHTML;
BoxForm[n].rel=x.replace(strNum(x),strPrice(strNum(x)));
sumBox2(BoxForm[n]);
}
quantity.addEvent('keyup', function() {
sumBox2(getBoxPrice(this,'form'));
});
quantity.addEvent('change', function() {
sumBox2(getBoxPrice(this,'form'));
});
quantity_button.addEvent('click', function() {
sumBox2(getBoxPrice(this,'form'));
});

function getBoxPrice(x,y) {
var BoxPrice='';
while(BoxPrice==''){
x=x.getParent();
if(x.getElement(y)!=null)BoxPrice=x.getElement(y);
if(
(y=='.product-Old-Price'&&x.getElements('form').length>1)
||
(y=='.product-Old-Price'&&oldprice.length<1)
||
(y=='.product-Old-Price'&&x.getElements('#vmMainPage').length)
)return null;
}
return BoxPrice;
}
function strNum(x) {
var r = "";
for(var n=0; n<x.length; n++) {
 var b= x.charAt(n);
 if (b!=' '&&isNaN(b)==false||b=='.'||b==',') r = r + b;
 if(r.slice(0,1)=='.'||r.slice(0,1)==',')r=r.slice(1);
}
return parseFloat(r.replace(/,/g,"."));
}
function strPrice(x) {
x = x.toString();
var y = x.charAt(0);
for(var n=1; n<x.length; n++) {
if (Math.ceil((x.length-n)/3) == (x.length-n)/3) y = y + " ";
y = y + x.charAt(n);
}
return y.replace(" .",",");
}
function addRate(x,y,z) {
var price=strNum(x.rel);
var b=z.getElements('select');
for(var n=0; n<b.length; n++) {
var add=b[n].options[b[n].selectedIndex].title;
var a=add.lastIndexOf("(");
var operand=add.slice(a+1,a+2);
if(y&&strNum(y)>1)y=null;
if(operand=='+'||operand=='-'||operand=='=')
add=eval(strNum(add.slice(a))+y);
if(operand=='+'||operand=='-') price=eval(price+operand+add);
if(operand=='=') price=add;
}
if(dynamic_quantity=='1'&&z.getElement('.inputboxquantity')!=null){
price=price*z.getElement('.inputboxquantity').value;
}
return price;
}
function sumBox2(x) {
var fl=2; if(strPrice(strNum(x.rel)).toString()==strPrice(parseInt(strNum(x.rel))).toString())fl=0;
var old=getBoxPrice(x,'.product-Old-Price');
if(eval(1+dynamic_rate)==1&&old){
if(dynamic_type=='1')var dynamic_rate2='*'+strNum(x.rel)/strNum(old.rel);
else var dynamic_rate2='+'+strNum(x.rel)-strNum(old.rel);
}else{var dynamic_rate2=dynamic_rate}
var price=addRate(x,dynamic_rate2,x).toFixed(fl);
getBoxPrice(x,'.productPrice').innerHTML=x.rel.replace(strPrice(strNum(x.rel).toFixed(fl)), strPrice(price));
if(dynamic_oldprice=='1'&&oldprice.length>0){
if(old){
 price=addRate(old,null,x).toFixed(fl);
 old.innerHTML=old.rel.replace(strPrice(strNum(old.rel).toFixed(fl)), strPrice(price));
}
}
}

});
Разработка и ремонт. VirtueMart. JoomShopping. Свои компоненты. Принимаю заявки на plasma-web.ru.
*

flashinfo

  • Новичок
  • 6
  • 1 / 0
Это далеко не все, что нужно еще учитывать. Скрипт, который вы искаверкали, по мимо прочего, учитывает скидки на товар, работает с множеством товаров, если они на одной странице, не требует никакого вмешательства в код магазина, отлажен на более чем 600 сайтах, имеет полезный дополнительный функционал.

Это хорошо, что вы пытаетесь сделать что-то по своему, плохо, что при этом вы не указали источник, которым пользовались, и претендуете, как уже вам написал fsv на "решение", не имея на это оснований.

Уважаемый lcd25, Вы как я понимаю, продаете Ваш плагин, я же просто поделился решением вопроса для бесплатного компонента VirtueMart, причем указал что все взято с открытых источников :) у вас на сайте кстати в открытом доступе имеется основа скрипта.. тем не менее - удачных продаж Вам!
*

varX

  • Живу я здесь
  • 2450
  • 141 / 5
  • разработка компонентов
Уважаемый lcd25, Вы как я понимаю, продаете Ваш плагин, я же просто поделился решением вопроса для бесплатного компонента VirtueMart, причем указал что все взято с открытых источников :) у вас на сайте кстати в открытом доступе имеется основа скрипта.. тем не менее - удачных продаж Вам!

Вы совершенно правы, flashinfo. У меня на сайте в открытом доступе имеется основа скрипта. Это сделано для того, чтобы новички, которые не могут купить плагин, пробовали и имели что-то, от чего можно оттолкнуться. Но вовсе не для того, чтобы продублировать название статьи, разбавляя поисковый трафик.

Дело в том, что админы реально работающих магазинов, и без этого с трудом могут что-то найти - интернет завален "детским" кодом. Отчасти эта проблема возникает из-за того, что разработчикам стало не интересно писать что-то стоящее. Отчасти, из-за того, что стоящее стало трудно найти в поиске.

Я вовсе не против, чтобы вы и дальше пытались разбираться с php или js, делились своими наработками с другими пользователями. Но мне кажется, в данном конкретном случае нужно было указать ссылку на источник.
Разработка и ремонт. VirtueMart. JoomShopping. Свои компоненты. Принимаю заявки на plasma-web.ru.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Отображение атрибутов товара в поле заказа и письме

Автор alexdarkvolf

Ответов: 1
Просмотров: 1590
Последний ответ 19.03.2020, 20:38:00
от gartes
Редактирование товара с сайта а не из админки?

Автор rabotnita

Ответов: 6
Просмотров: 3041
Последний ответ 04.02.2019, 13:33:40
от pH43
Не вводится параметры типа товара!

Автор Krav_xxl

Ответов: 2
Просмотров: 2989
Последний ответ 09.10.2017, 00:15:41
от Dmitry1991
Изменение товара

Автор almerashop89

Ответов: 12
Просмотров: 2214
Последний ответ 10.01.2017, 11:35:18
от almerashop89
Составная переменная цена товара в кнопке Купить

Автор sashgera

Ответов: 0
Просмотров: 2343
Последний ответ 20.03.2016, 17:34:44
от sashgera