Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”
Источники значений & в интернет-магазине "

Автор diii3Раздел Шаблоны XSLT

Ответов: 2
Просмотров: 2868
Последний ответ 10 Ноября 2012, 22:04:18
от diii3
Проблема с модулем "Обратная связь-->Шабло&

Автор don_basilioРаздел Настройка системы и модулей

Ответов: 2
Просмотров: 3022
Последний ответ 14 Ноября 2011, 20:13:47
от don_basilio
Как добавить вывод информации и редактирование информации в профиль

Автор rellaiРаздел Шаблоны XSLT

Ответов: 7
Просмотров: 5453
Последний ответ 28 Апреля 2014, 08:13:27
от rellai
Кастом в админ зону (или добавить просто ссылку кнопку)

Автор atachРаздел Custom макросы

Ответов: 3
Просмотров: 2689
Последний ответ 13 Сентября 2013, 11:18:00
от admin
не могу добавить виртуальные копии и ссылки на похожие страницы

Автор voldРаздел Наполнение сайтов

Ответов: 6
Просмотров: 56375
Последний ответ 20 Октября 2013, 16:21:58
от vold

0 Пользователей и 1 Гость просматривают эту тему.

*

atach

  • ***
  • 165
  • +6/-0
    • Просмотр профиля
Никто случаем не реализовывал функционал "добавить товар в избранное" для зарегистрированных пользователей.

Раньше на других проектах делал это путём модифицирования функции "сравнения". Но тогда убивалась сама функция сравнения (она и не нужна была).

Но сейчас нужно и сравнить и добавить в избранное.
Кто что может подсказать?

*

BaceH

  • ***
  • 141
  • +21/-0
    • Просмотр профиля
Re:Функция "добавить товар в избранное"
« Ответ #1 : 15 Июня 2013, 01:38:28 »
попробуйте в пользователе добавить поле "сылка на дерево", и туда записывать товары.

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Функция "добавить товар в избранное"
« Ответ #2 : 16 Июня 2013, 02:27:56 »
возможно, вам надо что-то вроде этого  Заказ черновик или временная корзина

*

e.ioffe

  • ****
  • 369
  • +81/-2
  • Профессиональная разработка на UMI.CMS.
    • Просмотр профиля
    • Fullspace - Лучший хостинг для UMI.CMS
Re:Функция "добавить товар в избранное"
« Ответ #3 : 25 Января 2014, 13:06:57 »
Реализовывал, даже написал специальный модуль - http://umihelp.ru/forum/index.php/topic,1611.0.html
Ускорение сайта на UMI.CMS - http://speed.umispec.ru/

*

Aisamiery

  • **
  • 83
  • +7/-4
    • Просмотр профиля
Re:Функция "добавить товар в избранное"
« Ответ #4 : 13 Мая 2014, 14:50:26 »
Расширял функционал, может кому пригодиться.
Задача: Сделать функционал закладок (корзины) на сайте с возможностью отправки заказа на email. Редакция бизнес, стандартной корзины нет, плюс нет цены, так сказать по запросу, так как товар уж больно дорогой. Все подцеплено к аяксу. Страница закладок работает только с xslt. Код выдран из проекта, по этому поставляю код "как есть" по лицензии GNU GPL  :D
<?php 
/*
 * Расширение модуля контент
 *
 */
class content_custom extends def_module
{
/*
* Добавление продукции в закладки на базе сессий по ajax
*/
public function addBookmark($productId = 0)
{
if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
if ( (int) $productId > 0) {

$return['message'] = 'При добавлении товара возникли ошибки';

$hierarchy = umiHierarchy::getInstance();
$page = $hierarchy->getElement($productId);

if ( ($page instanceof umiHierarchyElement)  ) {
$data = (empty($_SESSION['content.bookmark'])) ? array() : $_SESSION['content.bookmark'] ;

if (!in_array($productId, $data))
array_push($data, $productId);

$_SESSION['content.bookmark'] = $data;
echo json_encode(array('message'=> 'Продукт успешно добавлен в корзину')); exit();
} else {
echo json_encode($return); exit();
}
}
} else {
$referer = (empty($_SERVER['HTTP_REFERER'])) ? '/' : $_SERVER['HTTP_REFERER'];
$this->redirect($referer);
return;
}
}


/*
* Проверка наличия закладок
* (заглушка)
*/
public function isCheckBookmark()
{
return true;
}

/*
* Страница Закладки
*/

public function bookmark()
{
$data = (empty($_SESSION['content.bookmark'])) ? array() : $_SESSION['content.bookmark'] ;
//Вернуть айтемы
return array("nodes:item" => $data);
}

public function delBookmark($productId = 0)
{
if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
if ( (int) $productId > 0) {

$data = (empty($_SESSION['content.bookmark'])) ? array() : $_SESSION['content.bookmark'] ;

if (in_array($productId, $data) && ($key = array_search($productId, $data))) {
unset($data[$key]);
$_SESSION['content.bookmark'] = $data;
}

exit();
return;
}
} else {
$referer = (empty($_SERVER['HTTP_REFERER'])) ? '/' : $_SERVER['HTTP_REFERER'];
$this->redirect($referer);
return;
}
}

public function checkout()
{
$error = false;
$message = array();
if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
$data = (empty($_SESSION['content.bookmark'])) ? array() : $_SESSION['content.bookmark'] ;

if (count($data) < 1) {
$message[] = "Не выбрано не одного товара";
$error = true;
}

if (empty($_POST['username']) || empty($_POST['userphone']) || empty($_POST['useremail'])) {
$message[] = "Отсутствуют контактные данные. Все поля обязательны для заполнения.";
$error = true;
}


if (!$error) {
$body = "Был отправлен запрос с сайта.<br />\n";

$body .= "Контактные данные <br /> \n";
$body .= "Имя: ". htmlspecialchars($_POST['username']) . "<br />\n";
$body .= "Телефон: ". htmlspecialchars($_POST['userphone']) . "<br />\n";
$body .= "Email: ". htmlspecialchars($_POST['useremail']) . "<br />\n";
$body .= "<br /> \n";

$hierarchy = umiHierarchy::getInstance();

foreach ($data as $pageId) {
$product = $hierarchy->getElement($pageId);

if ( ($product instanceof umiHierarchyElement)  ) {
$body .= "<p>";
$body .= "Товар каталога: ";
$body .= '<a href="'. $hierarchy->getPathById($pageId) . '">'. $product->getName() .'</a>';
$body .= "</p>";
$body .= "\n";
}
}

$mail = new umiMail();
$mail->addRecipient("кому@отравим");
$mail->setFrom("от@кого", "Имя");
$mail->setSubject("Новая заявка с корзины сайта");
$mail->setContent($body);
$mail->commit();
$mail->send();
}

if (!$error)
$_SESSION['content.bookmark'] = array();

echo json_encode(array('messages' => $message, 'error' => $error)); exit();
} else {
$referer = (empty($_SERVER['HTTP_REFERER'])) ? '/' : $_SERVER['HTTP_REFERER'];
$this->redirect($referer);
return;
}
}
}

Можете адаптировать под свой проект. Отправку можно переделать под модуль webforms стандартного ядра.

Кому надо, но сам адаптировать не может, могу дописать под ваш проект за символическое вознаграждение :)
« Последнее редактирование: 13 Мая 2014, 15:13:56 от Aisamiery »

*

Aisamiery

  • **
  • 83
  • +7/-4
    • Просмотр профиля
Re:Функция "добавить товар в избранное"
« Ответ #5 : 13 Мая 2014, 14:52:37 »
Да забыл добавить, если мне не изменяет память, в php версии 5.5.* удалены функция json_*, требуется их переделать на сторонние

*

Aisamiery

  • **
  • 83
  • +7/-4
    • Просмотр профиля
Re:Функция "добавить товар в избранное"
« Ответ #6 : 13 Мая 2014, 15:05:28 »
Чтоб проще было разбираться, xslt шаблончик к модулю, а точнее к вызову
<xsl:apply-templates select="document('udata://content/bookmark/')/udata" mode="bookmarks"/>
:)

<xsl:template match="udata[@module = 'content' and @method = 'bookmark']" mode="bookmarks">
<div class="bookmarks-page">
<p>У вас нет отложенных товаров!</p>
</div>
</xsl:template>

<xsl:template match="udata[@module = 'content' and @method = 'bookmark' and count(item) &gt; 0]" mode="bookmarks">
<div class="bookmarks-page products">
<xsl:apply-templates select="item" mode="bookmarks" />
</div>
<div id="bookmarks-order">
<h3>Оформить запрос на продукцию</h3>
<form id="bookmark-send" method="post" action="/content/checkout/">
<div class="form-row">
<input type="text" placeholder="Ваше имя" class="place-black" name="username" data-required="true" />
</div>
<div class="form-row">
<input type="text" placeholder="Ваш телефон" class="place-black" name="userphone" data-required="true" />
</div>
<div class="form-row">
<input type="text" placeholder="Ваш Email" class="place-black" name="useremail" data-required="true" />
</div>
</form>

<div class="actions-checkout">
<button class="bookmark-btn" id="form-send">Отправить</button>
</div>

</div>
<script type="text/javascript" src="{$template-resources}js/jquery-validate.min.js"></script>
<script type="text/javascript" src="{$template-resources}js/jquery.form.js"></script>
<script type="text/javascript">
<![CDATA[
$("#bookmark-send").validate({
sendForm : false,
valid    : function() {
$("input", this).each(function(key, value) {
$(value).removeClass("error");
});
$("#bookmark-send").ajaxSubmit({
success: function (data) {
response = $.parseJSON(data);

if (response.error) {
$.each(response.message, function(k, m) {
$(".bookmarks-page").append("<p>" + m + "</p>");
});
} else {
$(".bookmarks-page").html("<p>Ваш запрос будет обработан в ближайшее время.</p>");
$("#bookmarks-order").remove();
}
}
});
},
invalid  : function() {
$("input", this).each(function(key, value) {
if ($(value).val().length < 4) {
$(value).addClass("error");
} else {
$(value).removeClass("error");
}
});
},
});

$("#form-send").on("click", function() {
$("#bookmark-send").submit();
});
$("#bookmark-send").ajaxForm();
]]>
</script>
</xsl:template>

<xsl:template match="item" mode="bookmarks">
<xsl:param name="pageInfo" select="document(concat('upage://', .))/udata" />
<div class="bookmark-item" id="product-{.}">
<div class="catalog-item">
<div class="product-image">
<img alt="" src="{document(concat('udata://system/makeThumbnailFull/(', $pageInfo//property[@name = 'main']/value/@path,')/200/170/'))//src}" />
</div>
<div class="equals">
<div class="product-title">
<a href="{$pageInfo/page/@link}"><xsl:value-of select="$pageInfo/page/name"/></a>
</div>
<div class="product-manufacture">
<span><xsl:apply-templates select="$pageInfo//property[@name = 'manufacture']/value/item/@name" /></span>
</div>
</div>
<div class="bookmark-button">
<button class="bookmark-btn" onclick="deleteProduct({.})">Удалить</button>
</div>
</div>
</div>
</xsl:template>