0.00
97 читателей, 75 топиков

Пределываем paramEdit на multiTV

И так, суть состоит в том, чтобы избавится от phx и paramEdit и переделать все доп параметры товаров на multiTV.

И так начнем.
P.S. Если вы устанавливаете SHK из Extras. То там уже изменен нужный файлик для совместимости с multiTV.
github.com/extras-evolution/Shopkeeper/commit/928d54ac4ef167d7178535afedc866692d15ed4b
если же нет то рекомендую обновить, иначе работать не будет.

Теперь наш json из multiTV будет передаваться в корзину и выводится в плесхолдере
[+addit_data+]
Дальше на multiTV можно делать все что душе пожелается.

Далее на примере селекта переделаем наш paramEdit на multiTV
На странице товара вместо
[*size:shk_widget=`select:size:desc_page:first_selected`*]

Вставляем вызов multiTV с нужными классами, чтобы все работало на стандартном js шопкипера.

[[multiTV?
&tvName=`params`
&docid=`[*id*]`
&outerTpl=`@CODE:<select class="addparam" onchange="jQuery.additOpt(this)" name="params__[*id*]">((wrapper))</select>`
&rowTpl=`price-row`
&display=`all`
]]

Чанк price-row
<option value="[[if? &is=`[+iteration+]-1` &math=`on`]]__[+price+]" [[if? &is=`[+iteration+]-1:=:0` &then=`selected="selected"` &math=`on`]]>[+size+]</option>

теперь все работает из коробки с использованием multiTV, что дает нам гораздо больше гибкости, чем paramEdit


Единственный важный момент в данном способе в конфиге multiTV у Вас должны быть обязательно название полей size и price.

Уведомление о заказах в интернет- магазине на мобильный

Приветствую всех!
На днях дорабатывал свой модуль интернет-магазина TSVshop и думал о том, как лучше всего уведомлять менеджера магазина о новых заказах. Конечно, уведомление на электронный адрес — это обязательно. Но что, если человек не так часто сидит за компом? Лучший вариант — дублировать уведомления на мобильный.

Как сделать это без лишнего кодописания (ударение на букву А :) )? Вот придумал простейший и быстрый способ это сделать без единой строчки кода, без подключения разных смс-агрегаторов, без всяких плагинов-шмагинов.


Читать дальше →

Yandex Map Custom TV

Для хранения в TV координат точки на яндекс-карте.
Скачивать здесь: github.com/Pathologic/YandexMapCustomTV
Требует DocLister c гитхаба (:



Выводится как-то так:

<script src="//api-maps.yandex.ru/2.1/?lang=ru_RU" type="text/javascript"></script>
<script type="text/javascript">
var myMap;
var coords = [ [*coords*] ];
if (coords.length) {
    ymaps.ready(init);
}
function init () {
    myMap = new ymaps.Map('map', {
        center: coords,
        zoom: 15
    });
    placemark = new ymaps.Placemark(coords, {
        hintContent: "Точка на карте",
        balloonContentBody: "<b>Бла-бла-бла</b>"
    }, {
        preset: 'islands#darkOrangeIcon'
    });
    myMap.geoObjects.add(placemark);
}
</script>

Крошки для админа

Как-то попался запутанный сайт и стало напрягать, что открыв ресурс для редактирования или нажав «создать дочерний» не видно, кто же собственно «папа» :) Так, по быстрому родился плагин adminNav на событие OnDocFormRender, который отображает путь к нашему ресурсу.


/**
 * adminNav
 *
 * Крошки для админа
 *
 * @author      webber (web-ber12@yandex.ru)
 * @category    plugin
 * @version     0.1
 * @license     http://www.gnu.org/copyleft/gpl.html GNU Public License (GPL)
 * @internal    @events OnDocFormRender
 * @internal    @properties &use_menutitle=Подставлять menutitle;text;0
 * @internal    @installset base, sample
 * @internal    @modx_category Manager and Admin
 */

$e = &$modx->Event;
if ($e->name == 'OnDocFormRender') {
	$id = $e->params['id'];
	$out = '<b>' . $modx->config['site_name'] . '</b>';
	$tmp = array();
	if ($id) {
		//редактируем известный документ
		$tmp = $modx->getParentIds($id);
	} else if (isset($_GET['pid'])) {
		//знаем только родителя и это не корень сайта
		$id = (int)$_GET['pid'];
		$tmp = $modx->getParentIds($id);
		array_unshift($tmp, $id);
	} else {
		//родитель - корень сайта
		$id = 0;
		
	}
	$tmp = array_reverse($tmp);
	$parents = implode(',', $tmp);
	if (!empty($parents)) {
		$orderBy = " FIND_IN_SET(id, '" . $parents . "') ";
		$q = $modx->db->query("SELECT id, " . ($use_menutitle == '1' ? " IF(menutitle='', pagetitle, menutitle) as " : "") . " pagetitle FROM " . $modx->getFullTableName("site_content") . " WHERE id IN (" . $parents . ") ORDER BY " . $orderBy);
		while ($row = $modx->db->getRow($q)) {
			$out .= " → <a href='index.php?a=27&id=" . $row['id'] . "'>" . htmlentities($row['pagetitle'], ENT_QUOTES, $modx->config['modx_charset']) . "</a>"; 
		}
	}
	
$out = '
<script type="text/javascript">
	$j(document).ready(function(){
		var content = "' . $out . '";
		$j("#create_edit h1").append("<div style=\"font-size:11px;\">" + content + "</div>");
	})
</script>
';
$e->output($out);
}


На выходе должно получится примерно так



Примечание:
1. требует установленного managermanager (сейчас он стоит у всех по умолчанию)
2. должен вызываться после вызова managermanager в «порядок вызова плагинов при наступлении события».

Возможно уже есть подобные решения, но я что-то не нашел.

как убрать перенаправление в MODX Revolution 2.2.6-pl (traditional)

у меня на сайте стоит перенаправление, как убрать?!
дело в том что хотел сайт сканировать через айболит или манул и т.п.
но перенаправляет в дом страницу
заранее спс всем

EvoGallery: защита оригинальных картинок

UPD: Сам по себе этот пост устарел, как и сама EvoGallery, но в комментариях обсуждается похожая, более актуальная тема защиты оригиналов для SimpleGallery.




Хочу поделиться способом защиты оригиналов картинок в милой сердцу EvoGallery.

… Мой клиент покупает у проектировщиков эскизы деревянных домов за деньги, эти эскизы будут размещаться на создаваемом сайте. Так как эскизы стоят денег — я защищаю их водяным знаком.

Несмотря на то, что появилась прекрасная SimpleGallery, для несложных проектов по-прежнему использую ЭвоГаллери — сила привычки велика. Думаю, и для многих других эта галерея по-прежнему актуальна.

Если картинок на сайте немного, я предпочитаю хранить оригиналы прямо «на месте», то есть в папке с именем original внутри альбома ресурса. Мало ли, клиенту придёт счастливая мысль поменять размеры превьюшек или сменить ватермарк.

Но есть одно но… чего стоят тогда все мои водяные знаки, если любой хитрый посетитель с минимумом знаний может запросто скачать оригиналы из этой папки? Да даже интуитивно может догадаться — название папки original говорит само за себя.

Вот и пришла мысль задать это имя самому. Для этого:

Читать дальше →

Base_url для нескольких доменов одного сайта

Решение для тех, кто устал бороться с несколькими доменами одного сайта и не знает, что с этим делать (возможно, что такие есть))))

1. Создаем сниппет siteUrl следующего содержания

<?php
return MODX_SITE_URL;
?>


2. В хидере сайта заменяем
<base href="[(site_url)]">
на
<base href="[!siteUrl!]">
. В результате избавляемся от «непонятных» перекидываний то на домен с www, то на домен без www, то на тестовый домен (это я еще не говорю про те сайты, которые изначально крутятся одновременно на нескольких доменах.

Все дело в том, что [(site_url)] кэшируется один раз и на разных страницах в зависимости от «точки входа» может быть разным — отсюда и проблемы с переходами туда/сюда (в критических случаях, практически всегда — вплоть до сброса корзины шопкипера на страницах с www и без него). Также очень актуально для ajax, когда мы «неожиданно» получаем «кроссдоменные» запросы, которые не работают :)

Решение конечно элементарнейшее, но после очередного вопроса решил написать о нем на видном месте :)

[REVO] Кейс: Профайлы преподавателей, или getResources слишком долгий

Под моим надзором находится сайт онлайн-школы. И есть на этом сайте страничка с профайлами преподавателей. Фактически она представляет собой опубликованный родительский ресурс с неопубликованными ресурсами для каждого из преподавателей. Вся информация о преподавателе расположена в «телевизорах» (TV).
На сайте профайл представляет собой ссылку в виде Фото+Имя и всплывающее окошко с более подробной информацией и формой записи на обучение. Все профайлы подцеплялись при помощи getResources и выводились списком.
К тому же есть пара переключателей, которые генерировали список Ajax-запросом без перезагрузки страницы – это «Язык» и «Носитель языка/Русскоязычный преподаватель».
Собственно, это была предыстория.

Профайлов не так уж много – 20-25, однако скорость генерации списка с помощью getResources заставляла меня плакать навзрыд – 5-12с. И чем больше, я знакомился с его документацией, тем меньше я верил в его нормальную работоспособность.


Читать дальше →

[REVO] Breadcrumbs – Убираем ссылки с неопубликованных ресурсов

Недавно мне была поставлена задача создать хлебные крошки для сайта. Сам сайт имеет не очень сложную структуру, поэтому в карте сайта были добалены дополнительные пункты меню, группирующие схожие ресурсы. Сами эти пункты своих страниц не имеют.
Другими словами – родитель есть, а страницы у родителя нет.
Но, несмотря на это, заказчик определил, что в хлебных крошках эти пункты меню отображаться все равно должны, но уже без ссылок.

Читать дальше →

[REVO] Избавляемся от дубликатов alias

Сложилась такая ситуация, что при импорте данных, url генерируется автоматически, и было очень много дубликатов, что не позволяло открывать страницы с дублирующими alias.

Ниже приведено решение, которое производит поиск дубликатов и их редактирование.
При это редактируются не все найденные alias, а только второй и последующий, это делается для того чтобы оставить 1 оригинал.

Редактирование происходит путем добавления id в начало адреса страницы.

<?php
error_reporting(0);
mysql_connect('localhost','','');
mysql_select_db('');

$d = mysql_query("SELECT group_concat(`id`) ids, count(id) c FROM `revo_site_content` GROUP by concat(uri) HAVING c > 1");
while($res = mysql_fetch_array($d))
{
$ids = explode(",",$res['ids']);
$i = 0;
foreach($ids as $id)
{
	$i++;
	if($i == 1)
		continue;
	echo $id . "\r\n
";
	$m = mysql_fetch_array(mysql_query("SELECT uri FROM `revo_site_content` WHERE id = $id"));
	$uri = $m['uri'];
	$uri2 = explode("/",$uri);
	$uri2 = end($uri2);
	$uri = str_replace($uri2,$id."-".$uri2, $uri);
		
	mysql_query("UPDATE `revo_site_content` SET `uri` = '".$uri."', `alias` = CONCAT('".$id."-',`alias`) WHERE `id` = '$id'");
}
}


Настройки

Указываем данные для подключения к БД
mysql_connect('localhost','','');
mysql_select_db('');


Запускаем скрипт по крону, если на сайте регулярно появляются дубликаты за счет импорта данных.