nekto

nekto

С нами с 02 марта 2015; Место в рейтинге пользователей: #991

Динамическая кнопка Купить / В корзине

Появилась необходимость реализовать динамическую кнопку Купить / В корзине.

Может кому-то пригодится.

Спасибо Алексею Наумову, Василию Наумкину за помощь в реализации.

Чанк Купить 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]]`]]
Klike
17 февраля 2015, 13:36
modx.pro
40
5 578
+2

Сортировка выдачи

Как реализовывается функционал сортировки?

К примеру


Павел Левин
27 января 2015, 12:07
modx.pro
1
1 500
0

mSearch2. Фильтрацию по диапазону дат

Доброго времени суток. помогите пожалуйста решить проблему с фильтрацией дат по диапазону в mSearch2.
Игорь Захаров
26 января 2015, 04:36
modx.pro
2
2 267
0

Товар с несколькими свойствами + цена для свойства

Добрый день.
Подскажите пожалуйста как можно реализовать сложение цен из свойств?
Есть товар с двумя свойствами «Материал» и «Размер» созданные при помощи системы плагинов.
Для каждого значения свойства присвоена цена на основе чего формируется стоимость товара.

Для передачи цены есть сниппет:
<?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
Всеволод
14 января 2015, 08:06
modx.pro
1
855
0

[pdoTools] 1.10.0 с ajax пагинацией из коробки

Еще один предпраздничный сюрприз — новая версия pdoTools, который добавляет любимую многими ajax пагинацию сразу в комплект дополнения.

Основы можно почитать в анонсе предыдущей версии, а я вам расскажу, что нового.

Все изменения касаются только одного сниппета pdoPage, у которого появилась масса новых параметров.
Первым делом это:
  • frontend_js — Ссылка на javascript для подключения сниппетом.
  • frontend_css — Ссылка на css стили оформления для подключения сниппетом.
Они работают только при активации параметра &ajaxMode, у которого возможны 3 значения:
  • default — стандартная ajax-пагинация, как на главной modx.pro.
  • button — загрузка новой страницы при нажатии на кнопку.
  • scroll — загрузка новой страницы при прокрутке.
Если параметр пуст, скрипты и стили не подключаются и ajax-пагинация не запускается.
Василий Наумкин
29 декабря 2014, 12:09
modx.pro
12
11 641
+11

[YaCaptcha] - яндекс каптча.

Сервис Яндекс.Чистый веб предназначен для борьбы со спамом в текстовых сообщениях, размещаемых пользователями и автоматическими роботами на страницах сайтов, форумов и пр.
Сервис позволяет обнаруживать спам-сообщения и формировать графическую CAPTCHA для отклонения запросов от роботов.

Реализовано три метода — обнаружение спама, получение CAPTCHA, проверка введённой CAPTCHA.
Для удобства все оформлено в пакет [YaCaptcha].

Простейший пример работы с [ajaxForm] тут demo.vgrish.ru/yacaptcha.html
Володя
26 декабря 2014, 06:17
modx.pro
1
14 532
+7

PdoResources. Оборачивать в div каждые 3 элемента

Здравствуйте!
Едут новости на сайте
xn--3-9sb0at.xn--p1ai/news/

Верстальщик предлагает каждым 3 новостям задать отдельный блок(row). Как это можно реализовать средствами pdoTools?
Спасибо.
Сергей
02 декабря 2014, 19:07
modx.pro
3
6 635
0

Наследуемость полей у расширяемых xPDO-классов

Всем привет!

Смотрите, когда в своих компонентах мы наследуемся от, допустим, 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>
Таким образом, имеем объект-«шаблон», у которого прописаны определённые поля и не прописана таблица. И остальные классы, которые расширяют этот класс-«шаблон» и добавляют в себя собственные столбцы (коряво выразился, знаю).

Так вот.
Алексей Карташов
12 ноября 2014, 22:52
modx.pro
12
2 802
+2

Динамическое обновление основной корзины

У MS2 есть хорошая вещь как возможность расширения класса msCartHandler. Все обновленные данные берутся $miniShop2->cart->status() и отсюда следует что нужно в этот массив данных дописать нужные нам данные, а именно список товаров которые попадут в [[+goods]]

И так начнем «колдовать»!
Роман Танаев
10 октября 2014, 10:25
modx.pro
31
10 039
+6

Отзывы с оценкой товара

Стоит задача сделать отзывы в интерент-магазине, с возможностью ставить оценку товара по 5-бальной шкале. Возможно кто-то встречался уже с похожей задачей и может подсказать, на чем это проще/быстрее реализовать? Буду очень признателен за помощь. С помощью существующих расширений Quip, Tickets,
modxTalks не получается — не понимаю, как можно к комментарию еще одно поле прикрутить, в которое бы сохранялся рейтинг отзыва.
Богдан
16 августа 2014, 16:07
modx.pro
15
7 289
0