Расширял функционал, может кому пригодиться.
Задача: Сделать функционал закладок (корзины) на сайте с возможностью отправки заказа на email. Редакция бизнес, стандартной корзины нет, плюс нет цены, так сказать по запросу, так как товар уж больно дорогой. Все подцеплено к аяксу. Страница закладок работает только с xslt. Код выдран из проекта, по этому поставляю код "как есть" по лицензии GNU GPL

<?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 стандартного ядра.
Кому надо, но сам адаптировать не может, могу дописать под ваш проект за символическое вознаграждение
