Next Generation CMS :: Форум поддержки

Заинтересовала наша система? Тогда этот форум для Вас!

Вы не зашли.

#51 2014-06-08 10:52:21

irbees2008
Продвинутый чайник ;)
Откуда Шахтинск
Зарегистрирован: 2012-03-14
Сообщений: 2,873
Рейтинг :   121 
Сайт

Re: Наглядный пример по запуску магазина на NG

FOQRussia пишет:

Хм, а может ли быть причиной, что я использую последние версии плагинов из SVN?

у меня все самое последнее,поменяй локалку на опен сервер,вертиго немного глючный

Не в сети

#52 2014-06-08 12:34:04

FOQRussia
Участник
Откуда Мыски
Зарегистрирован: 2012-03-11
Сообщений: 156
Рейтинг :   
Сайт

Re: Наглядный пример по запуску магазина на NG

irbees2008 пишет:
FOQRussia пишет:

Хм, а может ли быть причиной, что я использую последние версии плагинов из SVN?

у меня все самое последнее,поменяй локалку на опен сервер,вертиго немного глючный

ну это как я понимаю касаемо компа, а сайт на хостинге уже висит.

Не в сети

#53 2014-06-08 12:38:26

irbees2008
Продвинутый чайник ;)
Откуда Шахтинск
Зарегистрирован: 2012-03-14
Сообщений: 2,873
Рейтинг :   121 
Сайт

Re: Наглядный пример по запуску магазина на NG

давай попробуем разобраться,доступ в личку

Не в сети

#54 2014-06-08 14:45:53

irbees2008
Продвинутый чайник ;)
Откуда Шахтинск
Зарегистрирован: 2012-03-14
Сообщений: 2,873
Рейтинг :   121 
Сайт

Re: Наглядный пример по запуску магазина на NG

FOQRussia, Надо читать внимательнее

далее двигаем в папку НАЗВАНИЕ ВАШЕГО ШАБЛОНА\plugins\ там мы должны сделать папку basket и поместить в созданную папку файлы из папки engine\plugin\basket\tpl.

дальше разберешся как тебе надо.я там все сделал

Изменено irbees2008 (2014-06-08 18:25:44)

Не в сети

#55 2014-06-08 20:46:29

FOQRussia
Участник
Откуда Мыски
Зарегистрирован: 2012-03-11
Сообщений: 156
Рейтинг :   
Сайт

Re: Наглядный пример по запуску магазина на NG

irbees2008 пишет:

FOQRussia, Надо читать внимательнее

далее двигаем в папку НАЗВАНИЕ ВАШЕГО ШАБЛОНА\plugins\ там мы должны сделать папку basket и поместить в созданную папку файлы из папки engine\plugin\basket\tpl.

дальше разберешся как тебе надо.я там все сделал

Блин, спасибо огромное!!! Дальше сам разберусь, главное работает )))

Не в сети

#56 2014-06-08 21:14:17

irbees2008
Продвинутый чайник ;)
Откуда Шахтинск
Зарегистрирован: 2012-03-14
Сообщений: 2,873
Рейтинг :   121 
Сайт

Re: Наглядный пример по запуску магазина на NG

посмотри как здесь реализовано http://oriflame.vv.si/
если понравится выложу

Не в сети

#57 2014-07-13 16:28:54

nimiko
Участник
Откуда Мелитополь
Зарегистрирован: 2013-02-18
Сообщений: 108
Рейтинг :   

Re: Наглядный пример по запуску магазина на NG

Долго прыгал с бубном, но так и не вышло получить на почту и таблицу с товарами, и таблицу с инфой о заказчике =/

Не в сети

#58 2014-07-14 16:35:40

nimiko
Участник
Откуда Мелитополь
Зарегистрирован: 2013-02-18
Сообщений: 108
Рейтинг :   

Re: Наглядный пример по запуску магазина на NG

0.9.3 + SVN [SVN1295+]
basket+feedback не отправляют данные о пользователе.

форма с личной информацией есть:
0a622f4ee850t.jpg
но данных в письме нет:
cb58ce8329f4t.jpg

Изменено nimiko (2014-07-14 16:38:52)

Не в сети

#59 2014-07-15 02:40:20

nimiko
Участник
Откуда Мелитополь
Зарегистрирован: 2013-02-18
Сообщений: 108
Рейтинг :   

Re: Наглядный пример по запуску магазина на NG

В шаблоне плагина feedback в mail.html.tpl

			{% for entry in entries %}
			<tr style="background: #FFFFFF;" valign="top">
				<td style="background: #EFEFEF;">{{ entry.id }}</td>
				<td style="background: #EFEFEF;">{{ entry.title }}</td>
				<td style="background: #EFEFEF;">{{ entry.value }}</td>
			</tr>
			{% endfor %}

почему-то обрабатывается плагином basket, поэтому вместо имени, фамилии и прочего приходит информация о товаре.
Почему так происходит? Как сделать, чтобы этот кусок обрабатывался как полагается, feedback'ом?

Не в сети

#60 2014-07-15 08:54:48

irbees2008
Продвинутый чайник ;)
Откуда Шахтинск
Зарегистрирован: 2012-03-14
Сообщений: 2,873
Рейтинг :   121 
Сайт

Re: Наглядный пример по запуску магазина на NG

Тоже заметил этот косяк,при добавлении формы в баскет ничего кроме инфы по товару на почту не приходит,если не указывать форму в баскет то фидбэк работает нормально.
Видимо когда переводили на твиг где то появилась ошибка.
753810393.jpg?1405407934
406649270.jpg?1405407989
930050803.jpg?1405408020

Изменено irbees2008 (2014-07-15 11:07:37)

Не в сети

#61 2014-07-16 20:18:53

nimiko
Участник
Откуда Мелитополь
Зарегистрирован: 2013-02-18
Сообщений: 108
Рейтинг :   

Re: Наглядный пример по запуску магазина на NG

irbees2008 пишет:

Тоже заметил этот косяк,при добавлении формы в баскет ничего кроме инфы по товару на почту не приходит,если не указывать форму в баскет то фидбэк работает нормально.
Видимо когда переводили на твиг где то появилась ошибка.

Скрины несмотрибельны, но там вроде бы есть кнопки "удалить продукт" или товар.. Сам добавлял? script'ом удаляешь?

Кстати, при пересчёте товаров: если увеличить кол-во любого товара, то общая сумма пересчитывается, а общее кол-во единиц товара - нет sad
Пока других косяков не нашёл.

Хотелось бы ещё иметь возможность сразу добавлять любое кол-во единиц товара.
Как об этом говорилось выше, на странице товара и в таблице всех товаров - кнопки "+" и "-" и <input type="text" />, в котором можно вводить кол-во вручную.
И те же возможности в форме заказа: удалить товар из заказа, увеличить и уменьшить кол-во (кнопками), <input type="text" /> уже есть.
Вот, тогда корзина была бы практически готова к широкому использованию, а NG - к использованию в качестве магазина.

Кстати, порадовало то, что форму feedback  при оформлении заказов можно автозаполнять данными из xfields
из профиля пользователя, если они заполнил эти доп.поля в профиле.

Изменено nimiko (2014-07-16 20:37:16)

Не в сети

#62 2014-07-16 21:19:47

irbees2008
Продвинутый чайник ;)
Откуда Шахтинск
Зарегистрирован: 2012-03-14
Сообщений: 2,873
Рейтинг :   121 
Сайт

Re: Наглядный пример по запуску магазина на NG

Не в сети

#63 2014-07-16 21:29:26

nimiko
Участник
Откуда Мелитополь
Зарегистрирован: 2013-02-18
Сообщений: 108
Рейтинг :   

Re: Наглядный пример по запуску магазина на NG

irbees2008 пишет:

Благодарю, добавил себе в функционал smile

Не в сети

#64 2014-07-19 21:55:34

nimiko
Участник
Откуда Мелитополь
Зарегистрирован: 2013-02-18
Сообщений: 108
Рейтинг :   

Re: Наглядный пример по запуску магазина на NG

На странице корзины (шаблон list.tpl) маленьким плагином jquery добавил возможность регулировать кол-во при помощи + и -
Но на странице товаров (новостей) нет инпут=текст с кол-вом. Там только:

 [basket]<a href="#" onclick="rpcBasketRequest('plugin.basket.manage', {'action': 'add', 'ds':1,'id':{news-id},'count':1}); return false;">В корзину</a>[/basket]

В этом самом 'count':1 - эту единичку возможно завернуть в виде какой-нить переменной для js? Чтобы добавленный мною инпут=текст синхронизировался с этим count.
Меня интересует как сделать переменную. Синхронизировать с input я смогу.

Вопрос по некорректной отправке заказа на почту ещё в силе: http://ngcms.ru/forum/viewtopic.php?pid=38412#p38412

Изменено nimiko (2014-07-19 21:57:24)

Не в сети

#65 2014-09-28 09:11:55

irbees2008
Продвинутый чайник ;)
Откуда Шахтинск
Зарегистрирован: 2012-03-14
Сообщений: 2,873
Рейтинг :   121 
Сайт

Re: Наглядный пример по запуску магазина на NG

nimiko пишет:

На странице корзины (шаблон list.tpl) маленьким плагином jquery добавил возможность регулировать кол-во при помощи + и -
Но на странице товаров (новостей) нет инпут=текст с кол-вом. Там только:

 [basket]<a href="#" onclick="rpcBasketRequest('plugin.basket.manage', {'action': 'add', 'ds':1,'id':{news-id},'count':1}); return false;">В корзину</a>[/basket]

В этом самом 'count':1 - эту единичку возможно завернуть в виде какой-нить переменной для js? Чтобы добавленный мною инпут=текст синхронизировался с этим count.
Меня интересует как сделать переменную. Синхронизировать с input я смогу.

Вот реализация - + это файл list.tpl,ну стили и стили под себя,проверенно работает.
f3seatdy4c3m3lsx2gn8sg5ty.gif

<div id="cont-4" role="main">
      <h1>Ваша <br>корзина </h1>
	  {% if (recs > 0) %}
	<p class="nocommand">Ваши товары</p>
		<aside id="shippinginfos">
	<style type="text/css">
		span {cursor:pointer; }
		.number{
			margin:100px 30%;
		}
		.minus, .plus{
			width:12px;
			height:12px;
			background:#f2f2f2;
			padding:3px 5px 3px 5px;
			border:1px solid #ddd;
		}
		
	</style>
			<form method="post" action="/plugin/basket/update/"/>
				<table class="table"  style="width: 100%;">
					<tr style="border-bottom: 1px solid #E5E5E5;color: #787878;width: 100%;">
						<th style="
    padding: 10px 0;">#</th>
						<th style="
    padding: 10px 0;">Наименование</th>
						<th style="
    padding: 10px 0;">Цена</th>
						<th style="
    padding: 10px 0;">Кол-во</th>
						<th align="right" style="
    padding: 10px 0;">Стоимость</th>
					</tr>
					{% for entry in entries %}
					<tr  style="border-bottom: 1px solid #E5E5E5;color: #787878;width: 100%;">
						<td class="f11">{{ loop.index }}|</td>
						<td>{{ entry.title }}</td>
						<td align="center"><strong>{{ entry.price }}</strong></td>
						<td align="center"><span class="minus">-</span><input name="count_{{ entry.id }}" type="text" maxlength="5" style="width: 35px;" value="{{ entry.count }}"/><span class="plus">+</span></td>
						<td align="right" class="blue_t">{{ entry.sum }}</td>
						<td align="right"><input type="submit" name="count_{{ entry.id }}"value="очистить" onclick="this.form.reset(); "></td>
					</tr>
					{% endfor %}
					<tr class="muted"  style="border-bottom: 1px solid #E5E5E5;color: #787878;width: 100%;">
						<td style="
    padding: 10px 0;">Итого:</td>
						<td style="
    padding: 10px 0;"><strong class="green_t">{{ total }}</strong></td>
					</tr>
				</table>
				<div class="btn-group">
					<input type="submit" class="btn" value="Пересчитать"/> <input type="button" value="Оформить заказ" class="btn btn-primary" onclick="document.location='{{ form_url }}';"/>
				</div>
			</form>
			<script type="text/javascript" >
		$(document).ready(function() {
			$('.minus').click(function () {
				var $input = $(this).parent().find('input');
				var count = parseInt($input.val()) - 1;
				count = count < 1 ? 1 : count;
				$input.val(count);
				$input.change();
				return false;
			});
			$('.plus').click(function () {
				var $input = $(this).parent().find('input');
				$input.val(parseInt($input.val()) + 1);
				$input.change();
				return false;
			});
		});
	</script>
			<div class="clear20"></div>
			{% else %}
				<div class="msge">Ваша корзина пуста!</div>



{% endif %}
		</aside>
		</div>
nimiko пишет:

Вопрос по некорректной отправке заказа на почту ещё в силе: http://ngcms.ru/forum/viewtopic.php?pid=38412#p38412

Исправлено.Спасибо infinity237

Изменено irbees2008 (2014-09-28 11:03:14)

Не в сети

#66 2014-09-28 12:29:25

nimiko
Участник
Откуда Мелитополь
Зарегистрирован: 2013-02-18
Сообщений: 108
Рейтинг :   

Re: Наглядный пример по запуску магазина на NG

irbees2008, спасибо, но я говорил о странице товара и списка товаров (news.full и news.table). А в плагине корзины я плюсы-минусы реализовал лёгким jQuery плагином.
Баг с отправкой исправлен? Исправления уже включены в ночные сборки?

Не в сети

#67 2014-09-28 12:54:50

irbees2008
Продвинутый чайник ;)
Откуда Шахтинск
Зарегистрирован: 2012-03-14
Сообщений: 2,873
Рейтинг :   121 
Сайт

Re: Наглядный пример по запуску магазина на NG

nimiko пишет:

irbees2008, спасибо, но я говорил о странице товара и списка товаров (news.full и news.table). А в плагине корзины я плюсы-минусы реализовал лёгким jQuery плагином.
Баг с отправкой исправлен? Исправления уже включены в ночные сборки?

На странице с товаром надо сделать через форму
да изменения в свн есть

Не в сети

#68 2014-10-02 21:53:52

irbees2008
Продвинутый чайник ;)
Откуда Шахтинск
Зарегистрирован: 2012-03-14
Сообщений: 2,873
Рейтинг :   121 
Сайт

Re: Наглядный пример по запуску магазина на NG

nimiko пишет:

irbees2008, спасибо, но я говорил о странице товара и списка товаров (news.full и news.table).

http://ngcmshak.ru/nastroika-plaginov/b … lenii.html
вот реализация для страници товара
посмотреть как работает http://liv.ngcmshak.ru/dekorativnye-ele … 2-sht.html

Изменено irbees2008 (2014-10-02 21:55:41)

Не в сети

#69 2015-08-05 04:23:07

infinity237
Модератор
Откуда Russia, Moscow
Зарегистрирован: 2008-11-09
Сообщений: 2,674
Рейтинг :   176 
Сайт

Re: Наглядный пример по запуску магазина на NG

1/
Предположим у нас есть каталог продукции, с различными параметрами не влияющими на стоимость (например размер или цвет).
Задача: сделать вывод этого параметра в корзину и в письмо feedback'a. Решение задачи, когда параметр влияет на стоимость представлено в другой теме.

1) Создаем в xfields дополнительное текстовое поле: Новости → табличные данные. Например, size (Размер модели).
rl5J9.jpg
2) Заполняем таблицу из одного столбца для каждого продукта. Если продукт не имеет такого показателя, оставляем незаполненным.
3) Редактируем basket/lib/librpc.php, для того чтобы плагин мог работать с таблицами без "ценового столбца".
Найти https://github.com/vponomarev/ngcms-plu … #L130-L139
Заменить на:

$xc = xf_configLoad();
$xfData = xf_decode($nrec['xfields']);
$xfTData = unserialize($rec['xfields']);
// Get price
if (pluginGetVariable('basket', 'ntable_price') && isset($xfTData[pluginGetVariable('basket', 'ntable_price')])) {
	$price = $xfTData[pluginGetVariable('basket', 'ntable_price')];
} elseif (pluginGetVariable('basket', 'news_price') && isset($xfData[pluginGetVariable('basket', 'news_price')])) {
	$price = $xfData[pluginGetVariable('basket', 'news_price')];
} else {
	$price = 0;
}

4) Выводим в news.full.tpl элементы - radio переключатели выбора параметра:

{% if p.xfields._table.countRec > 0 %}
	{% for xdata in p.xfields._table.data %}
		<input id="{{ xdata.id }}" type="radio" name="size" value="{{ xdata.field_size }}">
		<label for="{{ xdata.id }}">{{ xdata.field_size }}</label>
	{% endfor %}
<hh>
{% endif %}

5) Выводим кнопку/ссылку "Добавить в корзину" (в news.full.tpl):

<a href="#" class="purchase">Добавить В корзину</a>

6) Пишем обработчик на JS + TWIG (в news.full.tpl):
Работает по принципу: если таблица размеров в новости заполнена, то заставить пользователя выбрать размер и добавить продукт в корзину. Если таблица не заполнена, то добавить продукт в корзину. TWIG конструкции можно переписать на JS/JQ, если в этом есть необходимость.

<script>
$(document).ready(function() {

	$(".purchase").click(function(e){
		{% if p.xfields._table.countRec > 0 %}
		var count = 1;
		var tblid = 0;
		tblid = $("input[type='radio']:checked").attr('id');
		if(typeof tblid == "undefined"){
			alert('<red>Вы не выбрали размер!</red>');
			return false;
		}
		rpcBasketRequest('plugin.basket.manage', {'action': 'add', 'ds':51,'id':tblid,'count':count});
		return false;
		{% else %}
		rpcBasketRequest('plugin.basket.manage', {'action': 'add', 'ds':1,'id':{news-id},'count':1});
		{% endif %}	
		
		e.preventDefault();
	});

});
</script>

7) Вывести переменную в таблицу  в шаблонах /plugins/basket/list.tpl и /plugins/basket/lfeedback.tpl

{{ entry.xfields.tdata.size }}

2/
Предположим у нас есть каталог продукции, с различными параметрами среди которых есть изображения.
Задача: сделать вывод изображения продукта в корзине, сделать возможным использовать ссылку на новость в письмах-заказах feedback'a.

0) Важно не забывать, что в шаблонах  /plugins/basket/list.tpl и /plugins/basket/lfeedback.tpl, как и в любых других TWIG шаблонах работают функции debagValue() и debugContext(), которые позволяют вывеси все возможные для использования переменные. Например:

{{ debugValue(entries) }}

Однако, к некоторым данным из новости нет доступа из шаблонов /plugins/basket/list.tpl и /plugins/basket/lfeedback.tpl (например ссылка на новость или изображения новости).
1) Редактируем basket/basket.php, для того чтобы плагин мог доставать нужные данные из таблиц news и images.
Требуется найти функциях plugin_basket_list(), onShow($formID, $formStruct, $formData, &$tvars), onProcess($formID, $formStruct, $formData, $flagHTML, &$tvars):

$total += round($rec['price'] * $rec['count'], 2);

Ниже добавить:

$linked_ds = $rec['linked_ds'];
$linked_id = $rec['linked_id'];
// Check if linked item is available            

switch ($linked_ds) {
	case $DSlist['news']:
		// Retrieve news record
		$recf = $mysql->record("select * from ".prefix."_news where id = ".db_squote($linked_id));
		if (!is_array($recf)) {
			return array('status' => 0, 'errorCode' => 3, 'errorText' => 'Item [news] with ID ('.$linked_id.') is not found');
		}
		
		$rec_img = array();
		$img_urls = array();                            
		foreach ($mysql->select("select * from ".prefix."_images where (plugin = 'xfields') AND (linked_id = ".db_squote($linked_id).")") as $irec) {
			$rec_img []= $irec;
		}
		foreach ($rec_img as $imgInfo) {
			$img_urls[] = ($imgInfo['storage']?$config['attach_url']:$config['images_url']).'/'.$imgInfo['folder'].'/'.$imgInfo['name'];
		}          

		$xc = xf_configLoad();
		$xfData = xf_decode($recf['xfields']);
		
		$rec['news'] = $recf;
		$rec['images'] = $img_urls;
		$rec['news_url'] = home.newsGenerateLink($recf);

	case $DSlist['#xfields:tdata']:
		// Retrieve XFields record
		$recf = $mysql->record("select * from ".prefix."_xfields where id = ".db_squote($linked_id));
		if (!is_array($recf)) {
			return array('status' => 0, 'errorCode' => 4, 'errorText' => 'Item [tdata] with ID ('.$linked_id.') is not found');
		}

		// Retrieve joined record (assume that it can be only news
		if ($recf['linked_ds'] != $DSlist['news']) {
			return array('status' => 0, 'errorCode' => 5, 'errorText' => 'Sorry, only news related XFields tables are supported now');
		}

		$nrec = $mysql->record("select * from ".prefix."_news where id = ".db_squote($recf['linked_id']));
		if (!is_array($nrec)) {
			return array('status' => 0, 'errorCode' => 6, 'errorText' => 'Item found, but related [news] is lost');
		}

                $rec_img = array();
                $img_urls = array();
		foreach ($mysql->select("select * from ".prefix."_images where (plugin = 'xfields') AND (linked_id = ".db_squote($nrec['id']).")") as $irec) {
			$rec_img []= $irec;
		}
		foreach ($rec_img as $imgInfo) {
			$img_urls[] = ($imgInfo['storage']?$config['attach_url']:$config['images_url']).'/'.$imgInfo['folder'].'/'.$imgInfo['name'];
		}                    

		$xc = xf_configLoad();
		$xfData = xf_decode($nrec['xfields']);
		$xfTData = unserialize($recf['xfields']);
		
		$rec['news'] = $nrec;
		$rec['images'] = $img_urls;
		$rec['news_url'] = home.newsGenerateLink($nrec);
}

+ добавить $DSlist в global.

Внимание, решение делает в наихудшем случае 2n запросов к БД на действие, где n - число продуктов в корзине, что может повысить нагрузку на БД при больших количествах заказов.

2) После этого в шаблонах /plugins/basket/list.tpl и /plugins/basket/lfeedback.tpl появится возможность доставать данные из массивов news и images.
Например вывод изображения:

{% for entry in entries %}
...
{{ entry.images[0] }}
...
{% endfor %}

Вывод ссылки на новость:

{% for entry in entries %}
...
{{ entry.news_url }}
...
{% endfor %}

Результат:
2vXfR.jpg

Не в сети

#70 2015-08-05 09:27:07

irbees2008
Продвинутый чайник ;)
Откуда Шахтинск
Зарегистрирован: 2012-03-14
Сообщений: 2,873
Рейтинг :   121 
Сайт

Re: Наглядный пример по запуску магазина на NG

Супер

Не в сети

#71 2015-08-05 16:57:02

ahatomik
Старожил
Откуда Киев
Зарегистрирован: 2012-07-02
Сообщений: 832
Сайт

Re: Наглядный пример по запуску магазина на NG

infinity237, Огромное спасибо.
просто предложу ..
Может нужна ссылка на FAQ (поста) или возможно вложить faq.txd в сам плагин.
Дабы не отвечать 100500 раз на вопросы таких "как я" с раздела "как сделать" !? smile

Не в сети

Подвал раздела

Работает на FluxBB