nekto
С нами с 02 марта 2015; Место в рейтинге пользователей: #1001Новая Google reCAPTCHA(v2) для FormIt
Наткнулся на дополнение ReCaptchaV2, позволяющее добавить новую капчу в FormIt.
Динамическая кнопка Купить / В корзине
Появилась необходимость реализовать динамическую кнопку Купить / В корзине.
Может кому-то пригодится.
Спасибо Алексею Наумову, Василию Наумкину за помощь в реализации.
Чанк Купить tplOut:
Чанк В корзине tplIn:
Скрипт (требуется подключенный jQuery)
Сниппет myButton:
Кнопка вызывается таким образом:
Может кому-то пригодится.
Спасибо Алексею Наумову, Василию Наумкину за помощь в реализации.
Чанк Купить tplOut:
<button type="submit" class="btn btn-cart btn-primary" name="ms2_action" value="cart/add">
Купить
</button>
<button type="submit" class="btn btn-checkout btn-success hidden" name="ms2_action" value="cart/add">
В корзине
</button>
Чанк В корзине tplIn:
<button type="submit" class="btn btn-checkout btn-success" name="ms2_action" value="cart/add">
В корзине
</button>
Скрипт (требуется подключенный jQuery)
if (typeof(miniShop2) != 'undefined') {
// кнопки В корзину/Оформить
miniShop2.Callbacks.Cart.add.response.success = function(response) {
miniShop2.Order.getcost();
miniShop2.sendData.$form.find('.btn-cart').addClass('hidden');
miniShop2.sendData.$form.find('.btn-checkout').removeClass('hidden');
};
miniShop2.Callbacks.Cart.remove.response.success = function() {
miniShop2.sendData.$form.find('.btn-cart').removeClass('hidden');
miniShop2.sendData.$form.find('.btn-checkout').addClass('hidden');
};
}
Сниппет myButton:
<?php
// Параметры
$idd = $modx->getOption('idd', $scriptProperties, $modx->resource->id);
$tplIn = $modx->getOption('tplIn', $scriptProperties, 'tplIn'); //Можно писать так: ('tplIn', $scriptProperties, '@INLINE Товар в корзине, кол-во – [[+count]], цена = [[+price]].');
$tplOut = $modx->getOption('tplOut', $scriptProperties, 'tplOut'); // '@INLINE Товара нет в корзине.'
// Классы для работы
$pdo = $modx->getService('pdoTools');
$miniShop2 = $modx->getService('minishop2');
$miniShop2->initialize($modx->context->key, $scriptProperties);
$cart = $miniShop2->cart->get();
// Поехали
$found = false;
foreach($cart as $product) {
if ($product['id'] == $idd) {
$found = $product;
break;
}
}
return $found
? $pdo->getChunk($tplIn, $found)
: $pdo->getChunk($tplOut);
Кнопка вызывается таким образом:
[[!myButton? &idd=`[[+id]]`]]
mSearch2. Фильтрацию по диапазону дат
Доброго времени суток. помогите пожалуйста решить проблему с фильтрацией дат по диапазону в mSearch2.
Товар с несколькими свойствами + цена для свойства
Добрый день.
Подскажите пожалуйста как можно реализовать сложение цен из свойств?
Есть товар с двумя свойствами «Материал» и «Размер» созданные при помощи системы плагинов.
Для каждого значения свойства присвоена цена на основе чего формируется стоимость товара.
Для передачи цены есть сниппет:
MODX Revolution 2.2.11-pl (traditional)
pdotools-1.9.7-pl
minishop2-2.1.8-pl1
Подскажите пожалуйста как можно реализовать сложение цен из свойств?
Есть товар с двумя свойствами «Материал» и «Размер» созданные при помощи системы плагинов.
Для каждого значения свойства присвоена цена на основе чего формируется стоимость товара.
Для передачи цены есть сниппет:
<?php
/* @var array $scriptProperties */
/* @var pdoFetch $pdoFetch */
if (!$modx->loadClass('pdofetch', MODX_CORE_PATH . 'components/pdotools/model/pdotools/', false, true)) {return false;}
$pdoFetch = new pdoFetch($modx, $scriptProperties);
if (empty($product) && !empty($input)) {$product = $input;}
if (empty($selected)) {$selected = '';}
if (empty($outputSeparator)) {$outputSeparator = "\n";}
if ((empty($name) || $name == 'id') && !empty($options)) {$name = $options;}
$output = '';
$product = !empty($product) ? $modx->getObject('msProduct', $product) : $product = $modx->resource;
if (!($product instanceof msProduct)) {
$output = 'This resource is not instance of msProduct class.';
}
elseif (!empty($name) && $options = $product->get($name)) {
if (!is_array($options) || $options[0] == '') {
$output = !empty($tplEmpty)
? $pdoFetch->getChunk($tplEmpty, $scriptProperties)
: '';
}
else {
$rows = array();
foreach ($options as $key=>$value) {
//отделяем название от цены и кол-ва
$prm = explode('=',$value);
$pName = $prm[0];
$pls = array(
'name' => $pName,
'value' => $key,
// 'selected' => $value == $key ? 'selected' : '',
'pages' => ''
);
//отделяем цену от кол-ва
if (isset($prm[1])){
$prOpt = explode(':',$prm[1]);
$pls['price'] = $prOpt[0];
if (isset($prOpt[1]) && $prOpt[1]){
//$pCount =
$pls['pages'] = $prOpt[1];
}
}
$rows[] = empty($tplRow) ? $value : $pdoFetch->getChunk($tplRow, $pls);
}
$rows = implode($outputSeparator, $rows);
$output = empty($tplOuter)
? $pdoFetch->getChunk('', array('name' => $name, 'rows' => $rows))
: $pdoFetch->getChunk($tplOuter, array_merge($scriptProperties, array('name' => $name, 'rows' => $rows)));
}
}
return $output;
Но проблема в том что цена подставляется только из одного свойства, если выбрать размер, а потом материал то в стоимость попадет только цена материала, а нужно что-бы к цене материала прибавлялась цена размера ну и на оборот.MODX Revolution 2.2.11-pl (traditional)
pdotools-1.9.7-pl
minishop2-2.1.8-pl1
[pdoTools] 1.10.0 с ajax пагинацией из коробки
Еще один предпраздничный сюрприз — новая версия pdoTools, который добавляет любимую многими ajax пагинацию сразу в комплект дополнения.
Основы можно почитать в анонсе предыдущей версии, а я вам расскажу, что нового.
Все изменения касаются только одного сниппета pdoPage, у которого появилась масса новых параметров.
Первым делом это:
Основы можно почитать в анонсе предыдущей версии, а я вам расскажу, что нового.
Все изменения касаются только одного сниппета pdoPage, у которого появилась масса новых параметров.
Первым делом это:
- frontend_js — Ссылка на javascript для подключения сниппетом.
- frontend_css — Ссылка на css стили оформления для подключения сниппетом.
- default — стандартная ajax-пагинация, как на главной modx.pro.
- button — загрузка новой страницы при нажатии на кнопку.
- scroll — загрузка новой страницы при прокрутке.
[YaCaptcha] - яндекс каптча.
Сервис Яндекс.Чистый веб предназначен для борьбы со спамом в текстовых сообщениях, размещаемых пользователями и автоматическими роботами на страницах сайтов, форумов и пр.
Сервис позволяет обнаруживать спам-сообщения и формировать графическую CAPTCHA для отклонения запросов от роботов.
Реализовано три метода — обнаружение спама, получение CAPTCHA, проверка введённой CAPTCHA.
Для удобства все оформлено в пакет [YaCaptcha].
Простейший пример работы с [ajaxForm] тут demo.vgrish.ru/yacaptcha.html
Сервис позволяет обнаруживать спам-сообщения и формировать графическую CAPTCHA для отклонения запросов от роботов.
Реализовано три метода — обнаружение спама, получение CAPTCHA, проверка введённой CAPTCHA.
Для удобства все оформлено в пакет [YaCaptcha].
Простейший пример работы с [ajaxForm] тут demo.vgrish.ru/yacaptcha.html
PdoResources. Оборачивать в div каждые 3 элемента
Здравствуйте!
Едут новости на сайте
xn--3-9sb0at.xn--p1ai/news/
Верстальщик предлагает каждым 3 новостям задать отдельный блок(row). Как это можно реализовать средствами pdoTools?
Спасибо.
Едут новости на сайте
xn--3-9sb0at.xn--p1ai/news/
Верстальщик предлагает каждым 3 новостям задать отдельный блок(row). Как это можно реализовать средствами pdoTools?
Спасибо.
Наследуемость полей у расширяемых xPDO-классов
Всем привет!
Смотрите, когда в своих компонентах мы наследуемся от, допустим, modResource, то в схеме мы пропишем следущее:
Теперь то, что хочу сделать я.
У меня есть пара десятков сущностей (и, соответственно, таблиц), у каждой из которых должен быть определённый набор полей, вроде «кем создан», «когда создан», «активно», «удалено» и т.д.
Так вот по аналогии с расширением класса modResource подумалось мне сделать вот так:
Так вот.
Смотрите, когда в своих компонентах мы наследуемся от, допустим, modResource, то в схеме мы пропишем следущее:
<model package="myPackage" baseClass="xPDOObject" platform="mysql" defaultEngine="MyISAM" phpdoc-package="myPackage" phpdoc-subpackage="" version="1.1">
<object class="myObject" extends="modResource">
</object>
</model>
И, собственно, всё — объект myObject унаследует все поля, их свойства и методы от класса modResource.Теперь то, что хочу сделать я.
У меня есть пара десятков сущностей (и, соответственно, таблиц), у каждой из которых должен быть определённый набор полей, вроде «кем создан», «когда создан», «активно», «удалено» и т.д.
Так вот по аналогии с расширением класса modResource подумалось мне сделать вот так:
<model package="myPackage" baseClass="xPDOObject" platform="mysql" defaultEngine="MyISAM" phpdoc-package="myPackage" phpdoc-subpackage="" version="1.1">
<object class="myObjectTemplate" extends="xPDOSimpleObject">
<field key="active" dbtype="tinyint" precision="1" attributes="unsigned" phptype="integer" null="false" default="0" />
<field key="deleted" dbtype="tinyint" precision="1" attributes="unsigned" phptype="integer" null="false" default="0" />
<field key="createdby" dbtype="int" precision="10" attributes="unsigned" phptype="integer" null="false" default="0" />
<field key="createdon" dbtype="int" precision="20" attributes="unsigned" phptype="timestamp" null="false" default="0" />
<field key="deletedby" dbtype="int" precision="10" attributes="unsigned" phptype="integer" null="false" default="0" />
<field key="deletedon" dbtype="int" precision="20" attributes="unsigned" phptype="timestamp" null="false" default="0" />
<!-- в действительности будет ещё десяток таких полей + индексы к ним -->
</object>
<object class="myObjectOne" table="my_object_one" extends="myObjectTemplate">
<field key="my_object_one_field" dbtype="int" precision="10" attributes="unsigned" phptype="integer" null="false" default="0" />
</object>
<object class="myObjectTwo" table="my_object_two" extends="myObjectTemplate">
<field key="my_object_two_field" dbtype="int" precision="10" attributes="unsigned" phptype="integer" null="false" default="0" />
</object>
</model>
Таким образом, имеем объект-«шаблон», у которого прописаны определённые поля и не прописана таблица. И остальные классы, которые расширяют этот класс-«шаблон» и добавляют в себя собственные столбцы (коряво выразился, знаю).Так вот.
Динамическое обновление основной корзины
У MS2 есть хорошая вещь как возможность расширения класса msCartHandler. Все обновленные данные берутся $miniShop2->cart->status() и отсюда следует что нужно в этот массив данных дописать нужные нам данные, а именно список товаров которые попадут в [[+goods]]
И так начнем «колдовать»!
И так начнем «колдовать»!