А какой будет путь до фотки? Важно в плане индексации вывести фотки в топ. Нужно получить сайт фотогалерея .jpg
А какой путь к фотке Вам нужен?
Форум ReadyScript Сообщения от Закусило Александр
А какой будет путь до фотки? Важно в плане индексации вывести фотки в топ. Нужно получить сайт фотогалерея .jpg
А какой путь к фотке Вам нужен?
Вы можете заказать разработку такого модуля галереи у нас на сайте на helpdesk.readyscript.ru или у сторонних разработчиков.
Ну и что? Повесьтесь на событие сохранения заказа и просто поправьте этот адрес, на тот что будет выбран в качестве пункта самовывоза. Ну или поправьте его при выборе данного пункта. Или ещё лучше просто после сохранения у таких заказов удалите адрес, который создастся. Вот и всё.
Событие orm.afterwrite.shop-order
0 и заполнить поля какими-нибудь своими данными, если выбрал на этапе ввода адреса Вашу галочку с самовывозом. Иначе просто оставлять поля пустыми. Просто если пользователь новый, то у него всегда будет 0 и надо записать адрес. И пусть приходит как какой-нибудь Ваш адрес записанный для данного пользователя. Он всё равно не будет этого видеть.
Единственное, я не знаю использует ли Ваша доставка индекс города. Скорее всего да. Но это можно обойти просто отправив запрос на Ваш обработчик внутри класса доставки и там уже заказу, при выборе пункта самовывоза передать значение выбранного индекса. Ну или поставить какой-нибудь свой индекс. Или оставить поле индекса. Вообщем вариантов много.
Ну запишите в куку выбор через jquery cookie, например.
http://stackoverflow.com/questions/1458 … ith-jquery.
А на странице доставки проверьте это значение. И если нужно выбрать радиокнопку на этапе доставки, то просто вызовите событие клика. И всё.
$('селектор нужной радио кнопки').click();
У нас есть возможность передавать любые данные через поля order_extra. Но они имеют свойство выдавать в конце в карточке редактирования заказа. Ну например такое поле, для страницы с выбором адреса
<input type="text" name="order_extra['Любое имя, можно и по русски']" value="{$order.order_extra.address['Любое имя, можно и по русски']}"/>
<pre>
{$order.order_extra}
</pre>
Но я думаю это вам вряд ли понадобится.
Хорошо. Ждём решения. Если нужна помощь и с административной частью, то мы поможем:) Обращайтесь.
Можно, но это нужно просто тему оформления немного переделать. У нас предпросмотр сейчас всплывает, только для многомерных комплектаций Вы можете заказать для себя платную доработку на helpdesk.readyscript.ru.
Отпишитесь если нужна помощь пожалуйста.
Это всё делается на хостинге. Прозвоните им они увеличат значения max_post_size, upload_max_filesize как и писалось выше. Либо если у Вас своя VPS, то это должен сделать Ваш администратор.
Всё гораздо проще чем Вы думаете. Никакого контроллера делать не нужно у нас всё для этого предусмотрено.
Вам надо отловить событие когда пользователь меняет пункт выдачи. После чего сделать запрос на фронт контроллер:
/shop/controller/front/checkout.inc.php он же в качестве маршрута shop-front-checkout (смотрите файл handlers.inc.php в модуле shop)
Соответственно url для обращения будет /checkout/useract/
Там есть метод actionUserAct. Он позволяет вызвать пользовательский метод из Вашего класса доставки или оплаты. В Вашем случае доставки.
Он принимает несколько параметров:
1. module - Имя модуля (По умолчанию Shop, у Вам соответственно Ваше название папки модуля)
2. typeObj - (0 или 1) 0 - доставка (DeliveryType), 1 - оплата (PaymentType)
3. typeId - id доставки или оплаты
4. class - Класс для обращения, т.е. класс который будет вызван.
5. userAct - Статический метод который нужно вызвать
6. params - Дополнительные параметры для передачи в метод
Описание типов переменных и, то что они принимают можно посмотреть в самом файле я думаю проблем не возникнет.
Соответственно мы можем сформировать запрос через AJAX, вот пример кода для доставки axiomus:
var $_this = $(this);
$.ajax({
url : $_this.data('url'),
type : 'POST',
dataType : 'json',
data : {
module : 'Axiomus',
typeObj : 0, //Доставка
typeId : $_this.data('delivery-id'),
'class' : 'Axiomus',
userAct : 'getChangedDelivery',
params : {
order : { //Объект заказа
way : $_this.data('way'),
key : $_this.data('key'),
value : office
}
}
},
success : function(response){
if (response.success){
$(data.options.axiomusCostId + $_this.data('delivery-id')).html(response.data);
}
}
});
Мы в шаблоне добавляем там свой js который обслуживает обработку этих событий и следит за выбором пользователя.
{addjs file="%axiomus%/delivery/axiomus_widjet.js"}
Поэтому я дополнительно скину код javascript самого модуля доставки Axiomus. Он не решит Ваших всех проблем, но там можно подсмотреть реализацию.
(function( $ ){
$.AxiomusWidjetCreator = function( method ) {
//Найдём ближайший input c выбором
var closestRadio = $('input[name="delivery"]:eq(0)');
var form = closestRadio.closest('form'); //найдем форму
var defaults = {
axiomusDiv : '.axiomusDeliveryBlock', //Контейнер куда будет вставлятся информация Axiomus
axiomusAdress : '.axiomusAdress', //Куда вставляется адрес
axiomusSchedule : '.axiomusSchedule', //Блок с расписанием работы
axiomusCostId : '#scost_' //Идентификатор блока с ценой за доставку
},
$this = form,
data = $this.data('axiomusInfo');
if (!$this.length) return;
if (!data) { //Инициализация
data = { options: defaults };
$this.data('axiomusInfo', data);
}
//public
var methods = {
/**
* Инициализация плагина
*
* @param initoptions - введённые пераметра для записи или перезаписи
*/
init: function(initoptions)
{
data.options = $.extend(data.options, initoptions);
//Навесим все события
presetAxiomusRadioEvents();
//Если контент обновился (для заказа на одной странице)
$('body').on('new-content',function(){
//Навесим события на переключатели
presetAxiomusRadioEvents();
//Проверим выбор sheepla и если она выбрана, то вызовем соответсвующий метод
var selectedCheckbox = $('input[name="delivery"]:checked');
if (typeof(selectedCheckbox.data('axiomus-div-id'))!='undefined'){
// setOrClearAxiomusInfo(null, selectedCheckbox);
}
});
},
/**
* Открывает доступность Axiomus для выбора
*
* @param checkBoxObj - объект с функциями Axiomus
*/
showAxiomus : function (checkBoxObj)
{
var parent = checkBoxObj.data('axiomus-div-id');
$("select",$(parent)).prop('disabled',false).change();
},
/**
* Убирает доступность Axiomus для выбора из всех вариантов
* и скрывает поля
*
*/
clearAxiomus : function ()
{
$(data.options.axiomusDiv+" select").prop('disabled',true);
}
}
//private
/**
* Срабатывает при нажатии на выбранную доставку.
* Если у этой доставки есть признак что если есть признак, что это Axiomus,
* то ничего не делаем. Если нет признака, что подгружалось,
*
*/
var setOrClearAxiomusInfo = function (Event, item)
{
if (Event === null){ //Если вызвали программно
var $_this = item;
}else{ //Если событие
var $_this = $(this);
}
var dataAxiomusDiv = $_this.data('axiomus-div-id');
if ( typeof(dataAxiomusDiv) != 'undefined' ) { //Если это радиокнопка Axiomus
methods.showAxiomus($_this); //Стартуем
}else{
methods.clearAxiomus(); //Очищаем
}
},
/**
* Устанавливает события для обработки
*/
presetAxiomusRadioEvents = function()
{
//Смена адреса доставки в выпадающем списке
$(data.options.axiomusDiv+" select",$this).off('change.axiomus').on('change.axiomus', changeAxiomusAdress);
$(data.options.axiomusDiv+" input[type='radio']", $this).off('change.axiomusradio').on('change.axiomusradio', changeAxiomusRadio);
//Пройдёмся по контейнерам СДЕК
$(data.options.axiomusDiv,$this).each(function(i){
//Найдём и отметим подходящие радиокнопки, которые относятся к СДЕК
var deliveryId = $(this).data('delivery-id');
var radio = $('input[name="delivery"][value="'+deliveryId+'"]');
//Перенесём данные к выборанной радио кнопке, чтобы можно было манипулировать
radio.data('axiomus-div-id',"#"+$(this).attr('id'));
if (radio.prop('checked')){
$("select", $(radio.data('axiomus-div-id'))).prop('disabled',false).change();
}
});
//Получим все радио кнопки
var radioboxes = $('input[type="radio"][name="delivery"]',$this); //найдем radio
//Навесим переключение радиокнопок
radioboxes.each(function(){
$(this).off('click.axiomus').on('click.axiomus', setOrClearAxiomusInfo);
});
$(data.options.axiomusDiv+" input[type='radio']:checked", $this).trigger('change.axiomusradio');
},
/**
* Смена адреса доставки в выпадающем списке
*
*/
changeAxiomusAdress = function()
{
var parent = $(this).closest(data.options.axiomusDiv);
var info = $("option:selected",$(this)).data('info');
if (typeof(info.address)!='undefined'){
$(data.options.axiomusAdress, $(parent)).html("Адрес: "+info.address);
}
if (typeof(info.schedule)!='undefined'){
$(data.options.axiomusSchedule, $(parent)).html(info.schedule);
}
var office = $(this).val();
var $_this = $(this);
$.ajax({
url : $_this.data('url'),
type : 'POST',
dataType : 'json',
data : {
module : 'Axiomus',
typeObj : 0,
typeId : $_this.data('delivery-id'),
'class' : 'Axiomus',
userAct : 'getChangedDelivery',
params : {
order : { //Объект заказа
way : $_this.data('way'),
key : $_this.data('key'),
value : office
}
}
},
success : function(response){
if (response.success){
$(data.options.axiomusCostId + $_this.data('delivery-id')).html(response.data);
}
}
})
},
/**
* Смена переключателя типа забора для DPD
*
*/
changeAxiomusRadio = function ()
{
var parent = $(this).closest(data.options.axiomusDiv);
var val = $(this).val();
if (val=="1"){
$("select", parent).prop('disabled', false);
}else{
$("select", parent).prop('disabled', true);
}
}
if ( methods[method] ) {
methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
} else if ( typeof method === 'object' || ! method ) {
return methods.init.apply( this, arguments );
}
}
})( jQuery );
$(document).ready(function(){
$.AxiomusWidjetCreator();
});
Послав запрос система сделает обращение к публичному статическому метод (public static function) Вашей доставки. В который передадутся несколько параметров. Например для случая с Axiomus и методом getChangedDelivery:
\Axiomus\Model\Deliverytype\Axiomus::getChangedDelivery($order - объект заказа, $delivery_id - id доставки, $params - Ваши дополнительные параметры, которые Вы передадите)
Теперь, что касается заказа. Заказ во время его оформления находится в сессии постоянно, поэтому Вы можете в него записывать "на лету" сразу и данные сохранятся, просто присвоив нужные значения не вызывая при этом insert или update. Эти методы системе понадобятся только один раз при создании самого заказа, когда пользователь подтвердил его создание.
Мы для записи данных рекомендуем использовать метод addExtraKeyPair у объекта заказа.
$order->addExtraKeyPair('ключ по которому можно достать данные', 'Значение для записи можно массив');
А потом доставать данные с помощью:
$order->getExtraKeyPair('ключ по которому можно достать данные');
Т.к. в таком случае эти данные можно будет достать и после физической записи заказа.
У заказа также есть метод addExtraInfoLine он позволит не только записать данные в заказ, но и инфомация будет доступна для отображения в админке при редактировании товара.
А у Вас файлы не пустые? Вы несколько раз пробовали загружать перед этим, или сразу с первого раза такое получили?
Можете нам скинуть мы посмотрим, если не пустые, но довольно странная вещь...
Для движка интернет-магазинов портфолио выполненных работ довольно странный модуль)
Вы можете настроить вывод товаров в данном блоке при помощи CSS. Это файл style.css в вашей теме оформления. Только отклонируйте тему оформления, чтобы она не сбрасывалась при обновлении (Управление->Шаблоны->Справа вверху кнопка "Клонировать тему оформления"). Только не забудьте на Вашу тему оформления переключится после клонирования.
Нужно поправить шаблон добавив условие проверки.
Если цена 0 то выводить такую строчку. Например:
{if !$product->getCost(null, null, false)}
Нет цены
{else}
Есть цена
{/if}
Всё мне кажется гораздо проще. Включите флаг публичности у складов, если Вам нужен выбор при оформлении заказа. А затем поправьте шаблон отвечающий за вывод карточки товара (product.tpl) и просто уберите из него вывод складов. Я думаю этот вариант Вам должен подойти.
1. Подскажите пожалуйста влияет ли активность пользователей или администраторов, которые пользуются сайтом во время того как происходит выгрузка из 1С? Каждый раз во время выгрузки происходит ошибка, если кто-то что-то делает в админке сайта.
Уточните ошибку. Потому как там ничего не понятно.
2. У нас в выгрузке около 2500 позиций с характеристиками и сама выгрузка выполняется около 10-15 минут, на это время все цены на сайте равны "0" - так и должно быть? Просто мы делаем выгрузку в 20:00 после того как закрывается наш розничный магазин, чтобы "подбить" верные остатки.
Да так и должно быть, т.к. при выгрузке цены предварительно удаляются. И потом по мере обработки файла с ценами они появляются. Изменить это нельзя. Ставьте полную выгрузку ночью. А выгрузку изменений ставьте раз в пол часа в течении дня. Выгрузка изменений занимает намного меньше времени.
Да нет. Там по id характеристики всё отображается.
Ну причин на мой взгляд 2.
1. Не сбросили кэш (Что вряд ли но всё же).
2. У Вас просто менее 2-х товаров, которые в данной категории обладают разными значениями этих характеристик которые не отображаются.
Ну если и это не так, нашите нам в поддержку. Разберёмся.
Можно. Надо лишь посчитать в шаблоне её.
Вот например так:
{$cost=$product->getCost(null, null, false)} {* Получим цену без фоматирования *}
{$oldcost=$product->getCost('Зачеркнутая цена', null, false)} {* Получим цену без фоматирования *}
{$delta=$oldcost-$cost} {* Посчитаем разницу *}
{$delta} {* Выведем разницу *}
<br/>
{$delta|format_price} {* Выведем разницу форматированную используя наш плагин format_price *}
Система написала ошибку, просто она отобразилась на уровне Вашего html. Посмотрите html который получается у Вас в итоге - в то место где прерывается.
Еще вопрос: расскажите пожалуйста как включить логирование и куда он пишет логи.
Я пробовал создать _local_settings.php в корне сайта вот с таким содержимым:<?php
\Setup::$DETAILED_EXCEPTION = true;По-моему ничего не изменилось. Мне бы включить максимальный уровень вывода ошибок на время разработки.
Для максимального вывода ошибок надо сделать сделать полностью как сказано здесь:
Как включить отображение ошибок
Как только сделаете ошибку, Вам всё выведется.
У нас есть возможность записи в лог файл, но зачем он Вам и что туда хотите получить?
А я заново пробовал создать экземпляр \RS\Http\Request и без 'url' пробовал, вот и не получалось. В доках, по-моему, про 'url' ничего не сказано.
Надо вот так:
\RS\Http\Request::commonInstance() //Получим сам объект
Вот простой пример:
$myvar = \RS\Http\Request::commonInstance()->request('имя моей переменной $_REQUEST', 'тип', 'значение по умолчанию');
Т.е.
$this->url = \RS\Http\Request::commonInstance()
Напишите в поддержку посмотрим.
Дописать можно либо сторонним модулем, либо заменяя стандартный файлы и выставляя окончание .my.inc.php.
Быстрого решения нет, т.к. нужно же ещё продумать логику, и какие отключать, а какие нет.
Вы можете заказать доработку у нас в helpdesk.readyscript.ru, если Вам сильно нужна данная дополнительная опция.
На данный момент такой возможности настройки поля при обмене нет. Но Вы можете внести предложение в сервис пожеланий на helpdesk.readyscript.ru
Из моего склада самого установить такую галочку не получится, т.к. там такого нет и не передаются такие данные в CommerceML. Можно только подвесится дополнительным модулем на хук и программно это прописать при импорте:
Вот хуки:
http://readyscript.ru/dev-manual/dev_ho … hooks_list
Вам нужен будет - exchange.task.afterimport.products или exchange.gate.afterimport.all
Форум ReadyScript Сообщения от Закусило Александр