[alpha] Реализация магазинов пользователей
Все выстроиол на поле weight (ниразу им не пользовался по назначению).
Смысл работы:
Пользователь регистрируется и попадает в группу usershop.
Есть страница создания товара, на ней выводится usCreateProduct, при создании сниппет получает id пользователя и записывает его в weight.
Внутри товара выводится сниппет usEditProduct который проверяет пользователя на наличие группы usershop и поле weight на соответствие id пользователя.
На странице заказов выводится usOrders который получает все заказы, в которых ищет weight=id пользователя (тот, что в группе usershop) и выводит заказанные товары ну и все поля заказа.
Реализация не сама лучшая, потихоньку пилю.
Код minishop2 не затронут, задействовано только поле weight
#Сниппет: usCreateProduct — требуется ajaxform.
#Чанк: tpl.usCreateProduct.form
Использование:
#Сниппет: usEditProduct
#Сниппет: usEditProductForm
#Чанк: tpl.usEditProduct.form
Использование — редактирование товара доступно по ссылке site.ru/страница_вывода_сниппета?id=67, где id = id товара в системе
#Сниппет: usOrders
#Чанк tpl.usOrder.row
Использование
В планах:
Переписать создание и редактирование, они уж очень кривые.
Прикрутить галерею при создании товара.
Ввести возможность продавцу (пользователю из группы usershop) менять статусы заказа (отправлен/отменен).
Реализовать отслеживание действий продавца в компоненте (при изменении товара не публиковать его, выслать сообщение менеджеру что товар изменен и его необходимо проверить и прочее).
Платное размещение на плошадке (с msProfile).
Вывод суммы продаж в кабинете продавца.
Вывод всех клиентов продавца с возможность экспорта.
Желающих принять участие — милости прошу.
Update 17.07.2014: Обновил снипеты и чанки создания и редактиования, более божеский вид и защита от других групп.
Смысл работы:
Пользователь регистрируется и попадает в группу usershop.
Есть страница создания товара, на ней выводится usCreateProduct, при создании сниппет получает id пользователя и записывает его в weight.
Внутри товара выводится сниппет usEditProduct который проверяет пользователя на наличие группы usershop и поле weight на соответствие id пользователя.
На странице заказов выводится usOrders который получает все заказы, в которых ищет weight=id пользователя (тот, что в группе usershop) и выводит заказанные товары ну и все поля заказа.
Реализация не сама лучшая, потихоньку пилю.
Код minishop2 не затронут, задействовано только поле weight
#Сниппет: usCreateProduct — требуется ajaxform.
<?php
if($modx->user->isMember('usershop')){
if (empty($_POST['title']) || empty($_POST['price']) || empty($_POST['parent'])) {
return $AjaxForm->error('Вы не заполнили поле');
}else {
$response = $modx->runProcessor('resource/create', array(
'class_key' => 'msProduct',
'pagetitle' => $_POST['title'],
'article' => $_POST['article'],
'introtext' => $_POST['introtext'],
'content' => $_POST['content'],
'template' => 2,
'published' => 0,
'parent' => $_POST['parent'],
'price' => $_POST['price'],
'old_price' => $_POST['price_old'],
'weight' => $modx->user->get('id')
));
if ($response->isError()) {
return $modx->error->failure($response->getMessage());
}
$modx->cacheManager->refresh();
return $AjaxForm->success('Товар добавлен');
}
}else{
return $AjaxForm->error('Нет доступа к созданию товара');
}
#Чанк: tpl.usCreateProduct.form
<form action="" method="post" class="usCreateProduct">
<div>
<label for="title">Название товара</label>
<input type="text" name="title" value=""/>
<span class="error error_title">[[+fi.error.title]]</span>
</div>
<div>
<label for="article">Артикул</label>
<input type="text" name="article" value=""/>
</div>
<div>
<label for="price">Цена</label>
<input type="number" name="price" value=""/>
<span class="error error_price">[[+fi.error.price]]</span>
</div>
<div>
<label for="price_old">Старая цена</label>
<input type="number" name="price_old" value=""/>
</div>
<div>
<label for="introtext">Краткое описание</label>
<input type="text" name="introtext" value=""/>
</div>
<div>
<label for="content">Описание</label>
<input type="text" name="content" value=""/>
</div>
<div style="width:100%;">
<select name="parent" value="">
<option disabled="disabled" selected> Выберите категорию </option>
[[pdoResources?
&parents=`0`
&where=`{"class_key":"msCategory"}`
&tpl=`@INLINE <option value="[[+id]]">[[+pagetitle]]</option>`
]]
</select>
</div>
<div class="control-group">
<div class="controls">
<button type="reset" class="btn">[[%af_reset]]</button>
<button type="submit" class="btn btn-primary">[[%af_submit]]</button>
</div>
</div>
</form>
Использование:
[[!AjaxForm? &snippet=`usCreateProduct` &form=`tpl.usCreateProduct.form`]]
#Сниппет: usEditProduct
<?php
$id = $_GET['id'];
$msProduct = $modx->getObject('msProduct', $id);
$msProductData = $modx->getObject('msProductData', $id);
if($msProductData->weight == $modx->user->get('id')){
if($form == '1'){
$output = $modx->runSnippet('AjaxForm',array(
'snippet' => 'usEditProductForm',
'form' => 'tpl.usEditProduct.form',
'successMessage' => 'test'
));
return $output;
}else{
$modx->setPlaceholders(array(
'pagetitle' => $msProduct->pagetitle,
'id' => $id,
'article' => $msProductData->article,
'price' => $msProductData->price,
'price_old' => $msProductData->old_price,
'introtext' => $msProduct->introtext,
'content' => $msProduct->content
),'product.');
}
}else{
return 'Вы не являетесь владельцем данного товара.';
}
#Сниппет: usEditProductForm
<?php
$product_id = $_POST['product_id'];
if (empty($_POST['title'])){
return $AjaxForm->error('Ошибки в форме', array('title' => 'Не задано название товара'));
}else{
$msProduct = $modx->getObject('msProduct', $product_id);
$msProductData = $modx->getObject('msProductData', $product_id);
if($msProductData->weight == $modx->user->get('id')){
$msProduct->set('pagetitle',$_POST['title']);
$msProduct->set('article',$_POST['article']);
$msProduct->set('price',$_POST['price']);
$msProduct->set('old_price',$_POST['price_old']);
$msProduct->set('introtext',$_POST['introtext']);
$msProduct->set('content',$_POST['content']);
if ($msProduct->save()) { $modx->cacheManager->clearCache(); return $AjaxForm->success('Товар изменен');}
}else{
return $AjaxForm->error('Вы пытаетесь изменить товар который Вам не принадлежит!');
}
}
#Чанк: tpl.usEditProduct.form
[[!usEditProduct]]
<form action="" method="post" class="usEditProduct">
<input type="hidden" name="product_id" value="[[+product.id]]">
<div>
<label for="title">Название товара</label>
<input type="text" name="title" value="[[+product.pagetitle]]"/>
<span class="error error_title">[[+fi.error.title]]</span>
</div>
<div>
<label for="article">Артикул</label>
<input type="text" name="article" value="[[+product.article]]"/>
</div>
<div>
<label for="price">Цена</label>
<input type="number" name="price" value="[[+product.price]]"/>
<span class="error error_price">[[+fi.error.price]]</span>
</div>
<div>
<label for="price_old">Старая цена</label>
<input type="number" name="price_old" value="[[+product.price_old]]"/>
</div>
<div>
<label for="introtext">Краткое описание</label>
<input type="text" name="introtext" value="[[+product.introtext]]"/>
</div>
<div>
<label for="content">Описание</label>
<input type="text" name="content" value="[[+product.content]]"/>
</div>
<div class="control-group">
<div class="controls">
<button type="reset" class="btn">[[%af_reset]]</button>
<button type="submit" class="btn btn-primary">[[%af_submit]]</button>
</div>
</div>
</form>
Использование — редактирование товара доступно по ссылке site.ru/страница_вывода_сниппета?id=67, где id = id товара в системе
[[!usEditProduct? &form=`1`]]
#Сниппет: usOrders
<?php
$owner = $modx->user->get('id');
foreach($modx->getIterator('msOrder') as $orders){
foreach($modx->getIterator('msOrderProduct', array('order_id' => $orders->id)) as $products){
foreach($modx->getIterator('msProductData', array('id' => $products->product_id, 'weight' => $owner)) as $product){
$order = $modx->getObject('msOrderAddress', array('id' => $orders->id));
$payment = $modx->getObject('msPayment', array('id' => $orders->payment));
$delivery = $modx->getObject('msDelivery', array('id' => $orders->delivery));
$status = $modx->getObject('msOrderStatus', array('id' => $orders->status));
$fields = array(
'payment'=>$payment->name,
'delivery'=>$delivery->name,
'delivery_cost'=>$orders->delivery_cost,
'reciever'=>$order->receiver,
'phone'=>$order->phone,
'city'=>$order->city,
'street'=>$order->street,
'building'=>$order->building,
'room'=>$order->room,
'comment'=>$order->comment,
// товар
'order'=>$order->id,
'product'=>$modx->getObject('msProduct', $product->id)->get('pagetitle'),
'count'=>$products->count,
'product_link'=>$modx->getObject('msProduct', $product->id)->get('uri'),
'date'=>$order->createdon,
'id'=>$product->id,
'price'=>$products->price,
'owner'=>$product->weight,
'status'=>$status->name
);
$output .= $modx->getChunk('tpl.usOrder.row',$fields);
}
}
}
echo $output;
#Чанк tpl.usOrder.row
<tr class="order number[[+order]]">
<td>[[+date]]</td>
<td><a href="[[+product_link]]" target="_blank">[[+product]]</a> x[[+count]]</td>
<td>[[+price]]</td>
<td>[[+status]]</td>
</tr>
<tr class="order_info number[[+order]]">
<td colspan="4">
Оплата: [[+payment]]
Доставка: [[+delivery]] / [[+delivery_cost]]
Адрес: [[+city]], [[+street]], [[+building]], [[+room]]
Имя: [[+reciever]]
Телефон: [[+phone]]
Коментарий: [[+comment]]
</td>
</tr>
Использование
<table class="usOrders" border="1" >
<tr class="head">
<th>Дата заказа</th>
<th>Товар</th>
<th>Цена</th>
<th>Статус</th>
</tr>
[[!usOrders]]
</table>
В планах:
Переписать создание и редактирование, они уж очень кривые.
Прикрутить галерею при создании товара.
Ввести возможность продавцу (пользователю из группы usershop) менять статусы заказа (отправлен/отменен).
Реализовать отслеживание действий продавца в компоненте (при изменении товара не публиковать его, выслать сообщение менеджеру что товар изменен и его необходимо проверить и прочее).
Платное размещение на плошадке (с msProfile).
Вывод суммы продаж в кабинете продавца.
Вывод всех клиентов продавца с возможность экспорта.
Желающих принять участие — милости прошу.
Update 17.07.2014: Обновил снипеты и чанки создания и редактиования, более божеский вид и защита от других групп.
Комментарии: 7
Обновил снипеты и чанки создания и редактирования, более божеский вид и защита от других групп.
Несколько дней рылся по докам и так и не нашел. как сделать загрузку изображений минишопа?
Нашел только единственный выход:
при создании грузить файл и вставлять ссылку на загруженный файл в базу.
Но при создании у товара нету id, непонятно как разбить несколько фоток.
Да и грузить фотки только после сохранения ресурса не очень хорошо…
Есть у кого идеи?
Нашел только единственный выход:
при создании грузить файл и вставлять ссылку на загруженный файл в базу.
Но при создании у товара нету id, непонятно как разбить несколько фоток.
Да и грузить фотки только после сохранения ресурса не очень хорошо…
Есть у кого идеи?
Получилось?
По поводу порядка загрузки изображений — вроде как, все уже придумано:
— грузить выбранные изображения в папку «0» (в выбранном источнике файлов), после чего при сохранении/создания ресурса, после присвоения ему Id — менять название папки и прописывать соответствующие записи в базу.
Альтернатив, насколько я знаю — нет (из-за этой специфики и ms/ms2gallery становится доступна в административной части только после создания ресурса). Готовых решений тоже.
— грузить выбранные изображения в папку «0» (в выбранном источнике файлов), после чего при сохранении/создания ресурса, после присвоения ему Id — менять название папки и прописывать соответствующие записи в базу.
Альтернатив, насколько я знаю — нет (из-за этой специфики и ms/ms2gallery становится доступна в административной части только после создания ресурса). Готовых решений тоже.
там не работает загрузка в галерею ms2, связывался с парнем, у нечего через амазон вроде все идет.
Сейчас с ним связался, может быть доработает до нужного состояния.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.