0.00
83 читателя, 73 топика

[EVO] Ошибка при большом обьёме данных в multiTv

Если у кого бывала ситуация когда вы набиваете multiTv данными, и на определённом моменте после сохранения, ресурс больше не открывается — зайдите в phpmyadmin, в таблице modx_site_tmplvar_contentvalues поменяйте тип поля value с TEXT на MEDIUMTEXT.

Как сделать несколько меток со своими изображениями на сайте с помощью Яндекс.Карты API 2.1

Благодаря помощи местных мастеров своего дела решил топик оформить как пример использования API Яндекс карт. В поиске самого Яндекса много информации, но путного нет ничего. Если нужно на карте сделать несколько меток со своим изображением надо делать следующее:

Шаг 1


Подключаем API Яндекса между тэгами ...

<script src="http://api-maps.yandex.ru/2.1/?lang=ru_RU" type="text/javascript"></script>


Шаг 2


В самом шаблоне сайта, в выводимой области вставляем вывод карты:


<div id="map" style="width: 100%; height: 498px"></div>


Шаг 3


Сам код с метками. Выкладываю на своём примере, надо было по Москве 3 метки гостиниц поставить со своим дизайном:


<script type="text/javascript">
ymaps.ready(init);

function init () {

var myMap = new ymaps.Map("map", {
                center: [55.6938,37.6001],
                zoom: 11,
				controls: ['zoomControl']
            }); 


var myGeoObjects = [];
        
        myGeoObjects[0] = new ymaps.Placemark([55.6740,37.7333],{
				clusterCaption: 'Заголовок', 
			//balloonContentBody: 'Текст в балуне',
				},{
				// Необходимо указать данный тип макета.
				iconLayout: 'default#image',
				iconImageHref: 'images/pointer_3.png',
				// Размеры метки.
				iconImageSize: [151, 41],
				// Смещение левого верхнего угла иконки относительно
				// её «ножки» (точки привязки).
				iconImageOffset: [-3, -42]
				});
        
        myGeoObjects[1] = new ymaps.Placemark([55.6990,37.7377],{
				clusterCaption: 'Заголовок', 
			//balloonContentBody: 'Текст в балуне',
				},{
				// Необходимо указать данный тип макета.
				iconLayout: 'default#image',
				iconImageHref: 'images/pointer_2.png',
				// Размеры метки.
				iconImageSize: [176, 52],
				// Смещение левого верхнего угла иконки относительно
				// её «ножки» (точки привязки).
				iconImageOffset: [-23, -42]
		});
	
        myGeoObjects[2] = new ymaps.Placemark([55.7377,37.6501],{
				clusterCaption: 'Заголовок', 
			//balloonContentBody: 'Текст в балуне',
				},{
				// Необходимо указать данный тип макета.
				iconLayout: 'default#image',
				iconImageHref: 'images/pointer_1.png',
				// Размеры метки.
				iconImageSize: [165, 40],
				// Смещение левого верхнего угла иконки относительно
				// её «ножки» (точки привязки).
				iconImageOffset: [-16, -42]
		});
        
var clusterIcons=[{
        href:'/images/pointer.png',
        size:[31,40],
        offset:[0,0]
}];
        
   var clusterer = new ymaps.Clusterer({
        clusterDisableClickZoom: false,
        clusterOpenBalloonOnClick: false,
        // Устанавливаем стандартный макет балуна кластера "Карусель".
        clusterBalloonContentLayout: 'cluster#balloonCarousel',
        // Устанавливаем собственный макет.
           //clusterBalloonItemContentLayout: customItemContentLayout,
        // Устанавливаем режим открытия балуна. 
        // В данном примере балун никогда не будет открываться в режиме панели.
        clusterBalloonPanelMaxMapArea: 0,
        // Устанавливаем размеры макета контента балуна (в пикселях).
        clusterBalloonContentLayoutWidth: 300,
        clusterBalloonContentLayoutHeight: 200,
        // Устанавливаем максимальное количество элементов в нижней панели на одной странице
        clusterBalloonPagerSize: 5
        // Настройка внешего вида нижней панели.
        // Режим marker рекомендуется использовать с небольшим количеством элементов.
        // clusterBalloonPagerType: 'marker',
        // Можно отключить зацикливание списка при навигации при помощи боковых стрелок.
        // clusterBalloonCycling: false,
        // Можно отключить отображение меню навигации.
        // clusterBalloonPagerVisible: false
    });

clusterer.add(myGeoObjects);
myMap.geoObjects.add(clusterer);
}
</script>


Пример карты можно посмотреть тут www.project-i.ru/contacts.html

Нашёл пару полезных линков:
api.yandex.ru/maps/tools/getlonglat/ — криво определяет
u-karty.ru/opredelenie-koordinat-na-karte-yandex — адекватный поиск
api.yandex.ru/maps/jsbox/2.1/placemark

Огромное спасибо за наставления 118RUS и webber

Ajax. Метод №3

Вкратце о раннее рассказанных методах.
1) Отправляем ajax запрос на туже страницу где мы находимся, а с ответа в нужном html теге вырезаем результат
+ простота
— скорость
— необходимость вырезать из ответа нужное
2) Через index-ajax.php Урок или на прямую на php файл
+ скорость
— необходимость подготовки скриптов их прописыванию
— правка кода через фтп
— необходимо иметь заготовку
3) Тут подробнее. Данный метод у некоторых людей поменяет стиль программирования в МОДх ))))

— создайте плагин AJAX с кодом

switch($_GET['q']){	
	case 'liked':
	    echo $_POST['value'].'-OK';  //вот тут код отработки вашего кода
            // выведим просто значение $_POST['value'] 
	break;
}
die();


— выставите его на событие OnPageNotFound

Все. Заготовка готова. Такой код запоминается на раз-два-три.
Самое интересное как этим пользоваться. Еще не догадались???? ))))

в консоли firebug давайте потестим как оно работает


$.ajax({
    url:'liked',
    type:'post',
    data:{
        value:1
    }
})


Ответом сервера будет «1-ОК» )) Все работает…

Для тех кому интересен принцип:
— идёт запрос на сервер по URL: liked
— так как его не существует (здесь вся соль) выполняется событие OnPageNotFound
— наш плагин как раз на данном событии
— .htaccess MODx преобразует frienly url в переменную которую отсылает GET параметром на index.php — потому используем $_GET['q'] для определения action

И что мы емеем. Для разных action мы просто прописуем их в case '':. на эти url шлем запросы.

+ скорость
+ простота (может и не с первого раза, но гарантирую что вы подсядите)

Сниппет для скрытия кода от посторонних

Название: administration
Использовать нужно то, которое будет удобно для постоянного использования.
Категория: 01. System
Например. Можно по русски. 01 — для сортировки удобно, по крайней мере в evo.
Код:
<?php
if(isset($_SESSION['mgrValidated'])){
    return $then;
}
?>


Использование:
[!administration?then=`Привет! Как жизнь!`!]
[[!administration?then=`Привет! Как жизнь!`]]


Всё очень просто.

Посткриптум: Только сейчас заметил, что код не отличается в EVO и REVO :)

Замена стандартного поиска

Для поиска в админке я использую Doc Finder 1.6
Чтобы не лазить постоянно в раздел Модули, а попадать в поиск сразу при нажатии на меню Поиск делаем простенький плагин

Doc Finder Redirect
if ($action==71) {
	if ($moduleid = $modx->db->getValue($modx->db->select('id', $modx->getFullTableName('site_modules'), 'name LIKE \'%Doc Finder%\''))) {
		$modx->sendRedirect(MODX_MANAGER_URL . "index.php?a=112&id={$moduleid}");
	}
}

вешаем на событие OnManagerPageInit

[EVO] Виртуальные сниппеты и чанки для комфортной работы в IDE

Способ о котором я поведу речь не для всех. А только для тех
  • Кого не устраивает текущая работа плагина FileSource
  • Кто хочет подключить свой проект к системе контроля версий, но не может это сделать полноценно из-за того, что чанки хранятся в базе
  • Кому надоело подключение чанков в стиле:
    [[include? &file=`assets/template/head.html`]]

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

Добавляем кнопку "ВЫБРАТЬ" в KCFinder для работы на тачскринах

Чтобы хоть как-то можно из КСФайндера поместить картинку на планшетах – слегка можно поправить скрипт KCFinder. И появится кнопка вставки картинки

1. В файле manager/media/browser/mcpuk/js/browser/files.js:
после строки 90 (перед закрывающим /div) вставляем
'<div class="selectThis">' + "Выбрать" + '</div>' +

2. после строки 36 вставляем
$('.selectThis').click(function() {
    _.unselect();
    browser.returnFile($(this).parent('.file'));
});

3. В файле стиля (в любом месте) manager/media/browser/mcpuk/themes/oxygen/style.css
.selectThis {
	padding: 6px 0;
	border-radius: 2px;
	background: #EEE;
	color: #4EA94E;
	cursor: pointer;
	text-transform: uppercase;
}
.selectThis:hover {
	background-color: #fff;
}


evoBabel - мультиязычные сайты на MODx EVO - теперь это легко и просто

Как обычно бывает — встала задача, неразрешимая средствами YAMS и очень неудобно рарзешимая другими средствами — создать мультиязычный сайт, чтобы
  • заказчик мог сам добавлять языки
  • переводы не были разбросаны по шаблонам, а содержались в одном месте
  • чтобы переключалка языков отправляла на нужный ресурс на другом языке
  • чтобы нормально без бубна работали сниппеты вроде DocLister, Wayfinder, Breadcrumbs и т.п.
  • и главное — чтобы не было жесткой привязки как в YAMS, т.е. структура сайтов на разных языках могла отличаться, а не было необходимости заполнять каждую новость, каждый товар и т.п.

Из всего этого на основе некоторых идей, почерпнутых из REVO Babel и с вооружившись библиотекой MODx API от Agel_Nash был разработан прототип решения evoBabel. Пример можно посмотреть на тестовом сайте.


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

[EVO] EVO Альтернатива любой галереи

Не раз натыкался на сообщения о том, какую галерею поставить. Не хочу быть навязчивым, но я отказался от всех видов галерей в пользу multiTV
github.com/Jako/multiTV#readme
Почему?
1. Один инструмент на все случаи жизни, единые источники
2. Можно создать любой тип галереи
3. Размещается на целевой странице
Как пример, вот –
www.expotec.ru/vyistavochnyie-stendyi/eksklyuzivnyie-stendyi

Зачем это?

Я использую multiTV вместо галерей не потому, что они “плохие” а потому, что:
  1. Огромные галереи с пагинацией встречаются нечасто (тут уместна Евогалерея).
  2. Чаще нужны компактные минигалереи или слайдеры.
  3. Хранить и управлять галерей файлов мне (и заказчикам) удобнее на целевой странице.
  4. Возможность гибко настраивать чанк юнита галереи дает полную свободу в настройках.
  5. В любой момент галерею можно перенастроить под другую задачу.

Туториал по созданию галереи на multiTV. Полный текст можно прочитать здесь