Доброго вам.
Есть калькулятор Cost Calculator 1.1.5. штука удобная но нашелся один баг, хотя может и фича, но для меня баг. Пытаюсь исправить, но в виду скудных знаний php и знаний JS на уровне "Ой вань гляди какие букафки" (с), это сделать весьма затруднительно. И если с php могу еще сам разобраться, то js ставит в тупик.
Суть: У калькулятора есть четыре основные шорткода:
Код:
[bt_cost_calculator][/bt_cost_calculator] // Основной контейнер (в нем находится все остальное)
[bt_cc_multiply][/bt_cc_multiply] // Контейнер в котором значения переумножаются между собой и прибавляются к основной сумме
[bt_cc_group eval=" "][/bt_cc_group] //программируемый контейнер (значения вычисляются js и прибавляются к общей сумме) в параметр eval=" " записывается скрипт
[bt_cc_item type=" " name=" " value=" " images=" "] // один вычисляющий элемент (вычисленное значение прибавляется к общей сумме
//Вид может быть примерно такой:
[bt_cost_calculator]
[bt_cc_item type=" " name=" " value=" " images=" "]
[bt_cc_item type=" " name=" " value=" " images=" "]
[bt_cc_multiply]
[bt_cc_item type=" " name=" " value=" " images=" "]
[bt_cc_item type=" " name=" " value=" " images=" "]
[/bt_cc_multiply]
[bt_cc_group eval=" "]
[bt_cc_item type=" " name=" " value=" " images=" "]
[bt_cc_item type=" " name=" " value=" " images=" "]
[/bt_cc_group]
[/bt_cost_calculator]
Все работает хорошо, но есть ограничения у
Код:
[bt_cc_group eval=" "]
[bt_cc_item type=" " name=" " value=" " images=" "]
[bt_cc_item type=" " name=" " value=" " images=" "]
[/bt_cc_group]
Стандартный скрипт из хелпа выглядит так:
Код:
[bt_cc_group eval="var item1 = $1; //первая переменная (первое поле)
var item2 = $2; //вторая переменная (второе поле)
var item3 = $3; // третья переменная (третье поле)
var result = item1 * item2 + item3; // вычисляет по порядку
return result;]
Я решил, что раз он программируемый, то не будем останавливаться и решил считать по "взрослому":
Код:
var tax = $1;
var num = $2;
var result = 0;
if (tax == 950 && num <= 10) {
result = (tax * num);
}else if (tax == 850 && (num >= 11 && num <= 20)) {
result = tax * num;
}else if (tax == 750 && num >= 21){
result = tax * num;
}else {
result = 0;
}
return (result);
Но дальше начались проблемы.
Вывод идет:
PHP:
static function handle_shortcode( $atts, $content ) {
extract( shortcode_atts( array(
'eval' => '',
'paypal_label' => ''
), $atts, 'bt_cc_group' ) );
$output = '<div class="btQuoteGBlock" data-eval="' . strip_tags( $eval ) . '" data-paypal_label="' . $paypal_label . '">' . wptexturize( do_shortcode( $content ) ) . '</div>';
return $output;
}
Первая проблема с выводом:
В
$eval передается скрип (в том же виде как он написан выше) но с переносами
<br>
strip_tags( )обрезает весь HTML и выводит. Собственно тут и началась первая проблема:
Код:
if (tax == 950 && num <= 10) {
result = (tax * num);
}else if (tax == 850 && (num >= 11 && num <= 20)) {
result = tax * num;
}else if (tax == 750 && num >= 21){
result = tax * num;
Выделенное жирным(в коде не выделилось) <= 10) { result = (tax * num); else if (tax == 850 && (num > и
<= 20)) { result = tax * num; }else if (tax == 750 && num > удаляется как HTML.
Пробовал разрешать теги
strip_tags( $eval, '<=>' ), резать перестает, но появляется другая проблема, которая поставила меня в тупик:
PHP:
// Вывод при strip_tags( $eval )
<div class="btQuoteGBlock" data-eval="var tax = $1;
var num = $2;
var result = 0;
if (tax == 950 && num = 11 && num = 21){
result = tax * num;
}else {
result = 0;
}
return (result);" data-paypal_label="">
// Вывод при strip_tags( $eval, '<=>' )
<div class="btQuoteGBlock" data-eval="var tax = $1;
var num = $2;
var result = 0;
if (tax == 950 && num <= 10) {
result = (tax * num);
}else if (tax == 850 && (num >= 11 && num <= 20)) {
result = tax * num;
}else if (tax == 750 && num >= 21){
result = tax * num;
}else {
result = 0;
}
return (result);» data-paypal_label=»»>
В первом варианте (исходный) режется скрипт, во втором варианте скипт резаться перестает, но обратите внимание на
амперсанд и
кавычки в последней строке. Вот почему???
Если оставлять strip_tags( $eval, '<=>' ) но выводить скрипт без условий:
PHP:
// Вывод при strip_tags( $eval, '<=>' ) но без условий
<div class="btQuoteGBlock" data-eval="var tax = $1;
var num = $2;
var result = (tax * num);
return (result);" data-paypal_label="">
Все выводится правильно.
При strip_tags( $eval) и strip_tags( $eval, '<=>' ) но убраных больше/меньше
PHP:
// strip_tags( $eval ) и убираем из условий больше/меньше точней меняем на равно
var tax = $1;
var num = $2;
var result = 0;
if (tax == 950 && num == 10) {
result = (tax * num);
}else if (tax == 850 && num == 15) {
result = (tax * num);
}else if (tax == 750 && num == 20){
result = (tax * num);
}else {
result = 0;
}
return (result);
//получаем результат:
<div class="btQuoteGBlock" data-eval="var tax = $1;
var num = $2;
var result = 0;
if (tax == 950 && num == 10) {
result = (tax * num);
}else if (tax == 850 && num == 15) {
result = (tax * num);
}else if (tax == 750 && num == 20){
result = (tax * num);
}else {
result = 0;
}
return (result);" data-paypal_label="">
// Все правильно и скрипт работает
Плагин в архиве (проверен на VirusTotal, все чисто, там их два нужен тот который bt_Cost_Calculator)