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

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

rss

Вы не зашли.

Объявление

  • Список
  •  » FAQ
  •  » Наглядный пример по запуску магазина на NG

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

irbees2008
Пользователь
Откуда: Шахтинск
Зарегистрирован: 2012-03-14
Сообщений: 2271
Рейтинг :   98 
Профиль  Вебсайт

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
Сообщений: 2271
Рейтинг :   98 
Профиль  Вебсайт

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

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

Неактивен

 

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

irbees2008
Пользователь
Откуда: Шахтинск
Зарегистрирован: 2012-03-14
Сообщений: 2271
Рейтинг :   98 
Профиль  Вебсайт

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
Сообщений: 2271
Рейтинг :   98 
Профиль  Вебсайт

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 не отправляют данные о пользователе.

форма с личной информацией есть:
http://s005.radikal.ru/i212/1407/83/0a622f4ee850t.jpg
но данных в письме нет:
http://s013.radikal.ru/i325/1407/77/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
Сообщений: 2271
Рейтинг :   98 
Профиль  Вебсайт

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

Тоже заметил этот косяк,при добавлении формы в баскет ничего кроме инфы по товару на почту не приходит,если не указывать форму в баскет то фидбэк работает нормально.
Видимо когда переводили на твиг где то появилась ошибка.
http://fotohosting.ucoz.kz/_ph/54/1/753810393.jpg?1405407934
http://fotohosting.ucoz.kz/_ph/54/1/406649270.jpg?1405407989
http://fotohosting.ucoz.kz/_ph/54/1/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
Сообщений: 2271
Рейтинг :   98 
Профиль  Вебсайт

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

Неактивен

 

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

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

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

irbees2008 написал:

кнопка удаления http://ngcms.ru/forum/viewtopic.php?pid=36533#p36533 демка http://oriflame.vv.si/

Благодарю, добавил себе в функционал 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
Сообщений: 2271
Рейтинг :   98 
Профиль  Вебсайт

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,ну стили и стили под себя,проверенно работает.
http://фото-хост.рф/img/2014-09/28/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
Сообщений: 2271
Рейтинг :   98 
Профиль  Вебсайт

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

nimiko написал:

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

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

Неактивен

 

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

irbees2008
Пользователь
Откуда: Шахтинск
Зарегистрирован: 2012-03-14
Сообщений: 2271
Рейтинг :   98 
Профиль  Вебсайт

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 03:23:07

infinity237
Модератор
Откуда: Russia, Moscow
Зарегистрирован: 2008-11-09
Сообщений: 2674
Рейтинг :   174 
Профиль  Вебсайт

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

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

1) Создаем в xfields дополнительное текстовое поле: Новости → табличные данные. Например, size (Размер модели).
http://i.snag.gy/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 %}

Результат:
http://i.snag.gy/2vXfR.jpg

Неактивен

 

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

irbees2008
Пользователь
Откуда: Шахтинск
Зарегистрирован: 2012-03-14
Сообщений: 2271
Рейтинг :   98 
Профиль  Вебсайт

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

Супер

Неактивен

 

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

ahatomik
Пользователь
Откуда: Киев
Зарегистрирован: 2012-07-02
Сообщений: 754
Профиль  Вебсайт

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

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

Неактивен

 
  • Список
  •  » FAQ
  •  » Наглядный пример по запуску магазина на NG

Board footer

Powered by FluxBB

[ Generated in 0.028 seconds, 27 queries executed ]