Если вдруг кому интересно, то смотрим сюда:
Как сделать заглушку сайта на ReadyScript
2,226 31.08.2015 11:44:31
Re: Выключение сайта , есть ли такой функционал? (4 ответов, оставленных в Вопросы по работе с системой)
2,227 31.08.2015 11:41:34
Re: Связи в БД (12 ответов, оставленных в Вопросы по разработке модулей и API системы)
Во первых.
Мы не приемлим прямых обращений в базу. У нас в системе на прямую обращаться нет надобности. Т.к. для этого уже всё предусмотрено. ЗАБУДЬТЕ о прямых обращениях в БД, это метод "лохматых" годов и"олдскул".
Со всем записями в БД можно работать через ORM объект. Каждому ORM объекту соответствует своя БД и своя одна запись в этой БД.
При удалении через ORM объект срабатывает метод delete() в котором, подтягиваются все необходимые данные и удаляются. Поэтому Вам надо сделать примерно так:
$product = new \Catalog\Model\Orm\Product(id записи в БД); //Получаем одну запись товара из БД и помещаем в ORM объект значения
$product->delete(); //Удалит товар и всё что с ним связано само Поэтому Вам вообще не надо думать о том какие таблицы задействованы.
Как делать выборки? Вот пара материалов из форума:
http://forum.readyscript.ru/topic/16/zaprosy-k-bd/
http://forum.readyscript.ru/topic/297/g … apis-v-bd/
http://forum.readyscript.ru/topic/321/f … -usloviem/
Ну и собственно документация:
Подсистема ORM и запросы
Если у Вас возникнут вопросы или надо подсказать запрос, то пишите мы Вам всё подскажем с примерами.
2,228 28.08.2015 17:16:36
Re: Добавить скрытие полей ввода данных на 1 этапе регистрации (6 ответов, оставленных в Вопросы по работе с системой)
Хорошо. Обсудим.
2,229 28.08.2015 16:09:11
Re: Добавить скрытие полей ввода данных на 1 этапе регистрации (6 ответов, оставленных в Вопросы по работе с системой)
Вообщем так надо сделать:
{addjs file="order.js"}
{assign var=errors value=$order->getNonFormErrors()}
{if $errors}
<div class="pageError">
{foreach from=$errors item=item}
<p>{$item}</p>
{/foreach}
</div>
{/if}
<form method="POST" id="order-form">
<input type="hidden" name="user_type" value="{$order.user_type}">
<div class="userProfile activeTabs" data-input-name="user_type">
{if !$is_auth}
<div class="formSection">
<span class="sectionListBlock">
<ul class="lineList tabList">
<li><a class="item {if $order.user_type=='person'} act{/if}" data-tab="#user-tab1" data-input-val="person" href="JavaScript:;">Частное лицо</a></li>
<li><a class="item{if $order.user_type=='company'} act{/if}" data-tab="#user-tab1" data-class="thiscompany" data-input-val="company" href="JavaScript:;">Компания</a></li>
<li><a class="item{if $order.user_type=='user'} act{/if}" data-tab="#user-tab2" data-input-val="user" href="JavaScript:;">Я регистрировался раннее</a></li>
</ul>
</span>
</div>
{/if}
<div class="tabFrame {if $order.user_type =='user'} hidden{/if}{if $order.user_type =='company'} thiscompany{/if}" id="user-tab1">
{if $is_auth}
<div class="formSection">
<span class="formSectionTitle">Покупатель</span>
<a href="{urlmake logout=true}" class="ml10">сменить пользователя (Выход)</a>
</div>
<table class="formTable">
{if $user.is_company}
<tbody>
<tr>
<td class="key">Название организации:</td>
<td class="value">
{$user.company}
</td>
</tr>
<tr>
<td class="key">ИНН:</td>
<td class="value">
{$user.company_inn}
</td>
</tr>
</tbody>
{/if}
<tbody>
<tr>
<td class="key">Имя:</td>
<td class="value">
{$user.name}
</td>
</tr>
<tr>
<td class="key">Фамилия:</td>
<td class="value">
{$user.surname}
</td>
</tr>
<tr>
<td class="key">Отчество:</td>
<td class="value">
{$user.midname}
</td>
</tr>
<tr>
<td class="key">Телефон:</td>
<td class="value">
{$user.phone}
</td>
</tr>
<tr>
<td class="key">E-mail:</td>
<td class="value">
{$user.e_mail}
</td>
</tr>
</tbody>
</table>
{else}
<table class="formTable">
<tbody class="organization">
<tr>
<td class="key">Название организации:</td>
<td class="value">
{$order->getPropertyView('reg_company')}
<div class="help">Например: ООО Аудиторская фирма "Аудитор"</div>
</td>
</tr>
<tr>
<td class="key">ИНН:</td>
<td class="value">
{$order->getPropertyView('reg_company_inn')}
<div class="help">10 или 12 цифр</div>
</td>
</tr>
</tbody>
<tbody>
<tr>
<td class="key">Имя:</td>
<td class="value">
{$order->getPropertyView('reg_name')}
<div class="help">Имя покупателя, владельца аккаунта</div>
</td>
</tr>
<tr>
<td class="key">Фамилия:</td>
<td class="value">
{$order->getPropertyView('reg_surname')}
<div class="help">Фамилия покупателя, владельца аккаунта</div>
</td>
</tr>
<tr>
<td class="key">Отчество:</td>
<td class="value">
{$order->getPropertyView('reg_midname')}
</td>
</tr>
<tr>
<td class="key">Телефон:</td>
<td class="value">
{$order->getPropertyView('reg_phone')}
<div class="help">В формате: +7(123)9876543</div>
</td>
</tr>
<tr>
<td class="key">E-mail:</td>
<td class="value">
{$order->getPropertyView('reg_e_mail')}
</td>
</tr>
<tr>
<td class="key">Пароль:</td>
<td class="value">
<input type="checkbox" name="reg_autologin" {if $order.reg_autologin}checked{/if} value="1" id="reg-autologin">
<label for="reg-autologin">Получить автоматически на e-mail</label>
<div class="help">Нужен для проверки статуса заказа, обращения в поддержку, входа в кабинет</div>
<div id="manual-login" {if $order.reg_autologin}style="display:none"{/if}>
<div class="inline f">
{$order.__reg_openpass->formView(['form'])}
<div class="help">Пароль</div>
</div>
<div class="inline">
{$order.__reg_pass2->formView()}
<div class="help">Повтор пароля</div>
</div>
<div class="inline">
<div class="form-error">{$order->getErrorsByForm('reg_openpass', ', ')}</div>
</div>
</div>
</td>
</tr>
{foreach from=$reg_userfields->getStructure() item=fld}
<tr>
<td class="key">{$fld.title}</td>
<td class="value">
{$reg_userfields->getForm($fld.alias)}
{assign var=errname value=$reg_userfields->getErrorForm($fld.alias)}
{assign var=error value=$order->getErrorsByForm($errname, ', ')}
{if !empty($error)}
<span class="form-error">{$error}</span>
{/if}
</td>
</tr>
{/foreach}
</tbody>
</table>
{/if}
<div class="formSection">
<span class="formSectionTitle">адрес</span>
</div>
{if count($address_list)>0}
<div class="existsAddress">
Использовать следующий адрес:
<table id="address-list">
{foreach from=$address_list item=address}
<tr>
<td><input type="radio" name="use_addr" value="{$address.id}" id="adr_{$address.id}" {if $order.use_addr == $address.id}checked{/if}></td>
<td>
<label for="adr_{$address.id}">{$address->getLineView()}</label>
<a href="{$router->getUrl('shop-front-checkout', ['Act' =>'deleteAddress', 'id' => $address.id])}" class="deleteAddress"/></a>
</td>
</tr>
{/foreach}
<tr>
<td><input type="radio" name="use_addr" value="0" id="use_addr_new" {if $order.use_addr == 0}checked{/if}></td>
<td><label for="use_addr_new">Другой адрес</label></td>
</tr>
</table>
</div>
{else}
<input type="hidden" name="use_addr" value="0">
{/if}
<table class="formTable">
<tbody class="new-address">
<tr>
<td class="key">Страна:</td>
<td class="value">
{assign var=region_tools_url value=$router->getUrl('shop-front-regiontools', ["Act" => 'listByParent'])}
{$order->getPropertyView('addr_country_id', ['data-region-url' => $region_tools_url])}
<div class="help">Например: Россия</div>
</td>
</tr>
<tr>
<td class="key">Область, Город:</td>
<td class="value">
<div class="inline f">
{assign var=regcount value=$order->regionList()}
<span {if count($regcount) == 0}style="display:none"{/if} id="region-select">
{$order.__addr_region_id->formView()}
</span>
<span {if count($regcount) > 0}style="display:none"{/if} id="region-input">
{$order.__addr_region->formView()}
</span>
<div class="help">Область/Край</div>
</div>
<div class="inline">
{$order->getPropertyView('addr_city')}
<div class="help">Город</div>
</div>
</td>
</tr>
<tr>
<td class="key">Индекс, Адрес:</td>
<td class="value">
<div class="inline f">
{$order.__addr_zipcode->formView()}
<div class="help">Индекс</div>
</div>
<div class="inline">
{$order->getPropertyView('addr_address')}
<div class="help">Адрес. Например: ул. Красная, 100, офис 71</div>
</div>
</td>
</tr>
</tbody>
<tbody>
<tr>
<td class="key">Контактное лицо:</td>
<td class="value">
{$order->getPropertyView('contact_person')}
<div class="help">Лицо, которое встретит доставку. Например: Иван Иванович Пуговкин</div>
</td>
</tr>
{if $order.__code->isEnabled()}
<tr>
<td class="key">Защитный код:</td>
<td class="value">
{$order->getPropertyView('code')}
<div class="help">Необходим для защиты от спам роботов</div>
</td>
</tr>
{/if}
</tbody>
</table>
{if $conf_userfields->notEmpty()}
<br>
<div class="formSection">
<span class="formSectionTitle">дополнительные сведения</span>
</div>
<table class="formTable">
<tbody>
{foreach from=$conf_userfields->getStructure() item=fld}
<tr>
<td class="key">{$fld.title}</td>
<td class="value">
{$conf_userfields->getForm($fld.alias)}
{assign var=errname value=$conf_userfields->getErrorForm($fld.alias)}
{assign var=error value=$order->getErrorsByForm($errname, ', ')}
{if !empty($error)}
<span class="form-error">{$error}</span>
{/if}
</td>
</tr>
{/foreach}
</tbody>
</table>
{/if}
</div>
{if !$is_auth}
<div class="tabFrame{if $order.user_type !='user'} hidden{/if}" id="user-tab2">
<table class="formTable">
<tbody>
<tr>
<td class="key">Логин:</td>
<td class="value">
{$order->getPropertyView('login')}
</td>
</tr>
<tr>
<td class="key">Пароль:</td>
<td class="value">
{$order->getPropertyView('password')}
<a href="?ologin=1" id="order_login">Вход</a>
</td>
</tr>
</table>
</div>
{/if}
</div>
<button type="submit" class="formSave">Далее</button>
</form>
<br><br><br>2,230 28.08.2015 16:02:39
Re: Добавить скрытие полей ввода данных на 1 этапе регистрации (6 ответов, оставленных в Вопросы по работе с системой)
Вы нашли tabFrame правильно. И теперь посмотрите где находится закрывающий </div>. Так вот это надо передвинуть таким образом, чтобы он закрыл ещё и див в выдачей адресов. Т.е. Вам надо просто перенести часть кода которая отвечает за адреса в перед закрывающим дивом tabFrame.
2,231 28.08.2015 13:42:18
Re: Печать бланков (16 ответов, оставленных в Предложения по улучшению системы)
Отлично. Ждём модуль в маркетплэйс.
2,232 28.08.2015 13:09:09
Re: Партнерские сайты или допсайты? (18 ответов, оставленных в Вопросы по работе с системой)
Спасибо, вот второй вариант меня как раз и интересует.
Папочки с поддоменами соответственно на хостинге.
А в папочке что?
Ну надо на каждый поддомен создать папки и настроить симлинк, чтобы папки ссылались на основную. Делается через хостинг.
2,233 28.08.2015 12:46:24
Re: Партнерские сайты или допсайты? (18 ответов, оставленных в Вопросы по работе с системой)
Забыл указать, что во втором способе можно назначать свою цену продажи под необходимый филиал.
2,234 28.08.2015 12:44:48
Re: Всплывающее окно при добавлении товара в корзину (3 ответов, оставленных в Вопросы по работе с системой)
Хорошо.
2,235 28.08.2015 12:35:07
Re: Партнерские сайты или допсайты? (18 ответов, оставленных в Вопросы по работе с системой)
Тут есть 2 пути. 1 через мильтисайтовость, другой через партнёрский модуль.
1. Мультисайтовость.
При покупке полной лицензии вы получаете дополнительно лицензию на 2 домена, под управлением одной системы. Но в данном случае, Всё будет разное в системе, кроме пользователей. Пользователи будут одинаковые для всех. Переключатся можно через админку.
Это будет как будто 2 разных сайта.
Соответственно, если у Вас сайтов больше 2-х, то Вам надо будет докупить лицензии на доп домены, до скольки Вам необходимо. Дополнительный сайт на Вашей лицензии будет стоить 3 750 на данный момент.
http://readyscript.ru/internet-magazin/shop-full/
Как сделать мультисайтовость можно почитать здесь:
Мультисайтовость
Причём править robots.txt, .htaccess не надо, т.к. у нас предусмотрено это действие на автомате при создании нового сайт.
2. Партнёрский модуль.
Он присутствует в версии Гипермаркет и позволяет добавлять сколько угодно сайтов на данную систему, но дело в том, что в данном случае, товары будут те же самые и Вы назначаете в каждый филиал нужные для показа товары, админ у них тоже будет свой. "Мордочки" сайтам можно тоже менять. Вам останется просто на хостинге настроить алиас поддомена на основную папку со скриптом. Добавить в админке сайты можно через Разное->Партнёрский модуль. Папочки с поддоменами соответственно на хостинге.
PS. Какую нагрузку на БД потянет скрипт? 10 000? 50 000? 200 000?
Скрипт потянет все, но надо понимать, что сайт это одна сторона, а хостинг другая. У нас есть сайты 35 000 и 60 000 товаров, которые себя спокойно чувствуют на обычном shared хостинге. Но надо смотреть по нагрузке, если посещаемость высокая, то соотвественно надо и хостинг по лучше. Но у нас скрипт не очень требовательный к ресурсом. Просто здесь всё индивидуально и зависит от хостинга.
2,236 28.08.2015 12:05:04
Re: Как добавить placeholder в поле input (3 ответов, оставленных в Вопросы по работе с системой)
При вызове поля через getPropertyView есть несколько параметров первым из которых является имя поля соответствующего объекта. А второй парамер принимает массив атрибутов для этого поля. Поэтому для Вашего случая конструкция будет выглядеть примерно так:
{$order->getPropertyView('reg_surname', ['placeholder'=>'Мой плэйсхолдер'])} Другое дело, что у нас действует ещё плагин data-deftext, который выполняет туже функцию, что и placeholder, только чуточку лучше и под все браузеры.
Поэтому можно и так:
{$order->getPropertyView('reg_surname', ['data-deftext'=>'Мой плэйсхолдер'])} 2,237 28.08.2015 11:58:43
Re: Добавить скрытие полей ввода данных на 1 этапе регистрации (6 ответов, оставленных в Вопросы по работе с системой)
В этой теме так как и в остальных используется activeTabs плагин для js. Находится он в jquery.activetabs.js. Там скрываются нужные контейнеры с классом tabFrame Скорее всего надо будет дообернуть нужный кусочек данным контейнером. Т.к. повидимому он не обёрнут.
Соответственно, нужно учесть, что данные контейнеры обладают своими идентификаторами, например первый это id="user-tab1", в него надо и обернуть.
2,238 28.08.2015 11:43:31
Re: как установить магазин на поддомен - не в корневую папку (1 ответов, оставленных в Вопросы по работе с системой)
Ну если у Вас присутствует домен xxxxx.ru, то поддомен, это просто папка как вы и указали. Т.е. по идее достаточно просто в браузере открыть поддомен, чтобы началась установка.
2,239 28.08.2015 11:41:29
Re: Всплывающее окно при добавлении товара в корзину (3 ответов, оставленных в Вопросы по работе с системой)
У нас такое реализовано было здесь
http://nefertiti-gsfr.ru/product/plat-e-00410-61061/
Кнопка в корзину представляет собой такой вид:
<div class="addToCartContainer" data-cart-url="{$router->getUrl('shop-front-cartpage')}">
<a href="{$router->getUrl('shop-front-cartpage', ["add" => $product.id])}" class="buyButton addToCart noShowCart" data-product-page="1">В корзину <i></i></a>
</div>А на класс addToCartContainer навешено событие, которое дописывает внутрь нужный нам код. В данном случае это выглядит так(theme.js):
var qCartAdd; //Таймер показа подсказки при покупке
/**
* Скрывать подсказку показывающую, что товар добавлен в корзину
*
*/
function hideCartHint(){
clearTimeout(qCartAdd); //Очищаем таймер, если он установлен
$("#cartHint").stop(true,true).fadeOut('slow',function(){ //Делаем затухание
$("#cartHint").remove(); //Удаляем добавлнный нами HTML
});
}
$(function() {
/**
* Событие которое вешается добавление в корзину, чтобы расширить функционал при добавлении в корзину.
* product.add это событие которое вызывается при добавлении в корзину
* @param object e - объект события
* @param object params - параметры из функции добавления в корзину
*/
$('body').on('product.add',function(e, params){
clearTimeout(qCartAdd); //Очищаем таймер, если он установлен
var _this = e.target; //Сама кнопка
var url = $(_this).closest('[data-cart-url]').data('cart-url'); //Откуда берём url корзины
$('#cartHint').stop(true,true).remove(); //Погасим прошлое всплывание, если несколько раз сразу нажали
$(_this).closest('.addToCartContainer').append('<div id="cartHint" class="cartHint"><div><i></i>Товар добавлен в корзину<br/><a href="'+url+'">Перейти в корзину</a></div></div>'); //Добавляем код внутрь
$("#cartHint").fadeIn(200,function(){ //Делаем плавный показ
qCartAdd = setTimeout('hideCartHint()', 3000); //Делаем затухание через 3 секунды
});
});
});Ну соответственно, надо будет настроить css под себя и разобраться javascript, по другому никак.
Если я Вас правильно понял, то это то что Вам нужно.
2,240 26.08.2015 17:18:24
Re: Вывод колонки с информацией из доп.полей пользователей (12 ответов, оставленных в Вопросы по работе с системой)
setFieldPrefix - это метод от родителя данного класса AbstructFilter
2,241 25.08.2015 16:20:33
Re: Как вывести количество товаров в категории (15 ответов, оставленных в Вопросы по работе с системой)
А нельзя чуть более подробнее описать процесс вывода кол-ва товаров в категории?
1. Вам нужно, это иметь шаблон блока, который выводит категории.
Он лежит по пути /templates/ВАША ТЕМА/moduleview/catalog/blocks/category/category.tpl
В нём идёт перебор циклом категорий и подкатегорий. Вывод категорий выглядит примерно так:
{$dir.fields.name}Эту конструкцию надо дополнить так:
{$dir.fields.name} <sup>({$dir.fields.itemcount})</sup>Т.е. {$dir.fields.itemcount} выводит нужное нам количество.
2. Если у Вас нет там шаблона, то просто скопируйте его из
/modules/catalog/view/blocks/category/category.tpl в
/templates/ВАША ТЕМА/moduleview/catalog/blocks/category/category.tpl
А дальше как в пункте 1.
3. Сохраняем шаблон и сбрасываем кэш.
И плюсом бы еще хотелось добавить кол-во товаров в фильтры (пример на картинке).
Пока такого функционала нет, для реализации задачи можно написать свой модуль.
2,242 25.08.2015 14:46:19
Re: Как добавить ползунок цены в категории? (4 ответов, оставленных в Вопросы по работе с системой)
В одном из ближайших обновлений этого можно будет избежать. В настройках модуля каталог появится флажок "Показывать фильтр по цене в виде слайдера". Если его установить, то всё будет работать сразу.
2,243 25.08.2015 14:24:57
Re: Вывод колонки с информацией из доп.полей пользователей (12 ответов, оставленных в Вопросы по работе с системой)
Да, дело именно в префиксе, т.к. передаётся массив параметрами для поиска и соответственно значение для поиска. Для объекта фильтра используйте функцию setFieldPrefix('f')
2,244 25.08.2015 14:12:58
Re: Как поменять адрес в обратной связи? (12 ответов, оставленных в Вопросы по работе с системой)
Обратитесь к нам в поддержку разберёмся. Вроде всё верно. Но нужно посмотреть.
2,245 25.08.2015 12:34:17
Re: Как поменять адрес в обратной связи? (12 ответов, оставленных в Вопросы по работе с системой)
Какая вкладка в конструкторе сайта у Вас выбрана?
2,246 25.08.2015 12:33:06
Re: Как поменять адрес в обратной связи? (12 ответов, оставленных в Вопросы по работе с системой)
Вроде всё верно. Кэш сбросили? И какая вкладка в конструкторе сайта у Вас выбрана?
2,247 25.08.2015 12:27:42
Re: Как поменять адрес в обратной связи? (12 ответов, оставленных в Вопросы по работе с системой)
А вы в настройках блока "Форма отправки на E-mail" указали форму для вывода?
2,248 25.08.2015 12:05:55
Re: Вывод колонки с информацией из доп.полей пользователей (12 ответов, оставленных в Вопросы по работе с системой)
Ну во первых посмотрите какие значения в списке регионов со значениями. Вероятно просто неверные значения в фильтр подставляются.
По сортировке... Сортировка запоминается в куках. Т.е. Вам надо выставить сортировку сначала нажав на нужную колонку и она запомнится.
2,249 25.08.2015 11:59:28
Re: Как поменять адрес в обратной связи? (12 ответов, оставленных в Вопросы по работе с системой)
У нас в системе действует система маршрутов(масок адресов), в данном случае /feedback-(номер формы)/ Поэтому url именно такой. По нему отслеживается, какую форму необходимо показать и обработать.
Как можно выкрутится?
Можно создать пункт меню в разделе Веб-сайт->Меню, у которого указать тип страница. В поле "Симв. идентификатор" укажем feedback. Далее идём в Веб-сайт->Конструктор сайта и добавляем нашу созданную страницу.
Если адаптивный дизайн, то нужно скопировать в центральной части контейнер из страницы "по-умолчанию" и в центральной части вставить блок с обратной связью.
А если не адаптивный(тема молодёжная), то указываем при создании страницы шаблон и вручную нужно прописать блок с вставкой обратной связи. Например, вот такая запись для вашего случая:
{moduleinsert name="\Feedback\Controller\Block\Feedback" form_id=1}2,250 25.08.2015 11:41:32
Re: Вывод анонса статьи с заданным количеством символов (11 ответов, оставленных в Вопросы по созданию тем оформления)
Всё равно мало сведений. Мне не совсем понятно. Вы хотите вывести информацию с одинаковой длинной символов, или вы хотите, чтобы у Вас были анонсы новостей разбиты по колонкам и эти колонки были одинаковыми по ширине?