0.00
92 читателя, 59 топиков

Кастомные TV + JS: patternTV, colorsTV, tagsTV - добавление графических параметров

Здравствуйте!

Решение возможно незрелое и код корявенький, но для меня удобное и простое.
Так как не использую managermanager, и, соответственно виджеты — а необходимость ввода графических данных (параметров) TV сохраняется — появилось это решение.

Решение базируется на CustomTV и JS без зависимостей. и плагине на событие OnDocFormTemplateRender — который выводит в форму редактирования код на чистом JS — вызывается одни раз и обслуживает все упомянутые типы TV.

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

ДЕЛАЕМ AJAX мать его так! :)

Требование: подключённый jquery.

Загружаем в наш DIV чё хотим. В примере id у DIV'а lalala.

Если подключён jquery, делаем:

<div id="#lalala" style="display: none;">
тут для поисковиков напишите что хотите, SEO'шникам ваще лафа.
</div>
<script>
$(document).ready(function() {
 $('.levajax').click(function(e){  //href class='levajax' data-levajax='divid'
   var href = this.href;
   var d = this.dataset.levajax; 
   $.ajax({
       url: href,
       type: 'GET',
       dataType: 'html',
       success: function(response) {
                 result = $(response).find(d);
                 $( d ).html(result);
                 $( d ).css('display','block'); //или inline как хошь
       }
   });
   return false; 
 });
</script>


и делаем где угодно, как пример:
<a href='что хошь' class='levajax' data-levajax="#lalala">
[+pagetitle+]
</a>


Главное, чтобы на странице был DIV с id, указанный в data-levajax и у ссылки класс был class='levajax'.

Meta Keywords

Берём все слова, из любых текстов и без сортировки по частоте появления в тексте, выводим их:

Сниппет [[getWords]]
Вызов: [[getWords? &text=`любой текст]]
Пример: [!getWords? &text=`[*pagetitle*] [*content*] [*мояTV*]`!]
Возвращает: тупо слова через запятую

Код сниппета:

$minlen=2; //Минимальная длина слова
$nowords=explode(",","звать,приглашать,принять,участие"); //Слова для исключения
$words=str_word_count($text, 1,"АаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯя");
foreach ($words as &$word) {
 if (mb_strlen($word)>$minlen && !in_array($word,$nowords)){
         $nm[]=mb_strtolower($word);
 }
}
$nm=array_unique($nm);
return @implode(",", $nm);


Для тех кто в танке или думает, что имеет значение какое место занимает слово, то добро пожаловать в факи яндекса и гугла — там ответ один — похрену что в мета тегах, мы рулим alt'ами изображений и совсем совсем чуточку учитываем ваши кейвордсы… причём иъ ждина нас не волнует.

MiltiPhotos и EVO 1.1 +

Не люблю старые решения но когда обновляешь сайты иногда приходиться с ними дружиться.

Тут уже спрашивали как исправить ситуацию с MultiPhotos.

Подсказали тут простой фикс, решил поделиться:)

Необходимо в настройках плагина просто заполнить все поля

не только список id но и роли (1,2,3) и список шаблонов после чего начинает работать :)
prnt.sc/czl0s4

правда еще превью не туда ссылается.

Пределываем 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 говорит само за себя.

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

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