Готовые решения

[Tickets] Ajax комментарии

В продолжении темы про книгу отзывов.
Как и обещал, выкладываю описание решения. Только я решил разбить его на отдельные пункты, потому что каждая из описанных возможностей может быть использована независимо от других.
Первым пунктом была указана возможность ajax подгрузки комментариев. Она самая простая. С нее и начнем.
Сергей Шлоков
31 октября 2014, 15:34
modx.pro
13
8 114
+11

[Tiсkets] Книга отзывов с ajax подгрузкой

Набравшись необходимых знаний в программировании и MODX, решил переделать книгу отзывов со своего сайта, удалить красивый, но кривой modxTalks, который разработчики давно забросили, и поставить отличный компонент Tickets — быстрый, удобный, с огромным функционалом. А главное, его автор всегда на связи и всегда готов помочь.
Пару дней разборок, которые мне выделили родные, взяв на себя все домашние обязанности и детей, и вот что в итоге получилось. Это пока бета версия. Хотелось бы услышать рекомендации от старших товарищей.
Что пришлось сделать:
1. Подгрузку комментариев по нажатию на кнопку, чтобы не выводить всю простыню пользователю. Можно было бы и автоматом при достижении низа страницы, но мне больше нравиться по кнопке. Также реализовано в Яндексе.
2. Смайлики. Ну куда же без них. Красиво же.
3. Ну и с CSS поколдавать, чтобы выглядело как простая книга отзывов.
Сергей Шлоков
27 октября 2014, 18:55
modx.pro
3
4 168
+4

Сниппет конвертирования из modResource в MS Word

Сниппет способен формировать *.doc файлы на основе заголовка и текста указанной страницы.
Пашок
23 октября 2014, 10:52
modx.pro
1
2 194
+2

Сниппет вывода path первого изображения из альбома компонента Gallery

Для начала создадим новый тип TV вот по этой инструкции — community.modx-cms.ru/blog/tips_and_tricks/8733.html

Далее создадим сниппет, который будет выводить наше первое изображение из альбома заполненного в дополнительных полях ресурса:
<?php
// Сниппет получения пути изображения из указанного альбома компонента Gallery

$album = $modx->getOption('album', $scriptProperties, '1'); // проверяем, указан ли id альбома.. (по умолчанию - id альбома = 1)
$rank= $modx->getOption('rank', $scriptProperties, '0'); // проверяем, указан ли номер картинки в альбоме, по счёту от начала, которую нужно вывести.. (по умолчанию - первая)
$toPlaceholder = $modx->getOption('toPlaceholder', $scriptProperties, ''); // в плейсхолдер

$where=array();
$where['album'] = $album;
$where['rank'] = $rank;

$gAlbumItemObj = $modx->getObject("galAlbumItem", $where );

$pathToImage = ''; // Сохраняем пустоту, чтобы в случае пустого альбома обновить плейсхолдер..

// Проверяем, получили ли мы результат.. проще говоря - есть ли такая картинка в таком альбоме
if(is_object($gAlbumItemObj)) {
	$gItemObj = $modx->getObject("galItem", array('id' => $gAlbumItemObj->get('item')) );
	
	$pathToImage = '/assets/gallery/' . $gItemObj->get('filename');
	//print_r($gItemObj->toArray()); die;
}

if($toPlaceholder!='') {
	$modx->setPlaceholder($toPlaceholder, $pathToImage);
} else {
	return $pathToImage;
}
Пример запроса к сниппету:
[[!getGalleryImage? &album=`[[*hotelPhotos]]`&toPlaceholder=`hotelFirstImage`]]
[[*hotelPhotos]] — это TV с id альбома Gallery (с тем новым типом TV, который мы создали по инструкции выше)
Также мы можем указать параметр «rank», он будет отвечать, какое по счёту изображение от начала нам вывести. Допустим если укажем "&rank=`1`", то получим второе по счёту от начала изображение, укажем «2» — получим третье изображение и т.д.
Пашок
22 октября 2014, 11:53
modx.pro
1
2 436
+1

Динамическое обновление основной корзины

У MS2 есть хорошая вещь как возможность расширения класса msCartHandler. Все обновленные данные берутся $miniShop2->cart->status() и отсюда следует что нужно в этот массив данных дописать нужные нам данные, а именно список товаров которые попадут в [[+goods]]

И так начнем «колдовать»!
Роман Танаев
10 октября 2014, 10:25
modx.pro
31
10 254
+6

Виджет "статистика minishop2"


Установка:
1. Загрузить файл в core / components / minishop2 / elements / widgets
2. Открыть Панели / Создать виджет
3. Имя: ms2_stat (или какое хотите).
Тип: файл
Путь к файлу: [[++ core_path]] компоненты / minishop2 / элементы / виджеты / widget.ms2_stat.php
4. Панель / Добавить виджет / ms2_stat (или то что указали в п.3)
Роман Танаев
10 октября 2014, 07:09
modx.pro
16
4 538
+5

Хлебные крошки в админке MODX

<?php
if ($modx->event->name == 'OnDocFormPrerender') {    
	if (!$id = $modx->controller->resourceArray['id']) {
		return;
	}
	$resources = array();
    foreach ($modx->getParentIds($id, 10, array('context' => 'web')) as $parentId) {
		if ($parentId) array_push($resources, $parentId);		
    }    
	natsort($resources);
	$resources[] = $id;
	
	$setting = $modx->getObject('modSystemSetting', 'settings_version');
    $version = explode('.',$setting->get('value'));
    $url = MODX_MANAGER_URL.'/manager/index.php?a=30&id=';
    if($version[1]==3){
        $url = MODX_MANAGER_URL.'?a=resource/update&id=';
    }
	
	$level = 0;
    $childTemplates = '<a style="color: #333;" href="'.MODX_MANAGER_URL.'">Панель</a> <span style="color: #333;">|</span> ';
    foreach ($resources as $resourceId) {
      $resource = $modx->getObject('modResource', $resourceId);
      if ($resourceId == $id) {
          $childTemplates .= '<span style="color: #333;">'.$resource->get('pagetitle').'</span>';
      } else {
          $childTemplates .= '<a style="color: #333;" href="'.$url.$resource->get('id').'">'.$resource->get('pagetitle').'</a> <span style="color: #333;">|</span> ';
      }
      $level++; 
    }

	
	$modx->controller->addHtml('
	<script>'."
		Ext.onReady(function() {		
			var title = Ext.select('#modx-resource-header');
			var pagetitle = Ext.select('#modx-resource-pagetitle');
			
			title.createChild('<p style=\"padding-bottom: 15px;\">$childTemplates</p>');
			pagetitle.on('keyup', function(){
				title.createChild('<p style=\"padding-bottom: 15px;\">$childTemplates</p>');
			});			
		});					
		</script>	
	".'</script>');
	
	return;
}

Update
(15.10.2014) — Добавлена генерация url в зависимости от версии cms.

Исходный код: github.com/tanaevr/BreadCrumbsManager
Роман Танаев
10 октября 2014, 07:03
modx.pro
8
3 754
+8

Yandex карта как TV-параметр.

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

Менеджеры могут вставлять iframe (что удобно для единичного случая), но если таких офисов много?
В общем, я для личного использования сначала написала просто копируемый плагин, а потом запаковала его в компонент (вроде работает все).

При удалении только пишет ошибки) не нашла (или плохо искала) в уроках Василия как при удалении удалять созданные ресурсы (у меня плагин и категория)

ссылка на компонент

PS может кому и пригодится такая штука
yani
08 октября 2014, 11:32
modx.pro
4
1 824
+6

Вывод товаров с определенным цветом

Вывод товаров определенного цвета:
[[!msProducts?
	&parents=`0`
	&innerJoin=`{"Options":{"class":"msProductOption"}}`
	&groupby=`msProduct.id`
	&where=`{"Options.key":"color","Options.value:IN":["Белый","Белая"]}`
]]
Вывод товаров с нужным именем файла-изображения:
[[!msProducts?
	&parents=`0`
	&innerJoin=`{"msProductFile":{"alias":"File","on":"msProduct.id = File.product_id"}}`
	&groupby=`msProduct.id`
	&where=`{"File.name:LIKE":"%IMG_0049%"}`
]]
Не больше 2х LIKE, если не знаешь точного имени:
&where=`{"File.name:LIKE":"%file1%","OR:File.name:LIKE":"%file2%"}`
или сколько угодно в IN, если знаешь:
&where=`{"File.name:IN":["file1.jpg","file2.jpg"]}`
Wassi Wassinen
27 сентября 2014, 18:23
modx.pro
11
5 004
0

Сниппет проверки прав доступа по группам

Простой сниппет для проверки прав доступа, при выполнении которого выводится чанк.

Может пригодится для вывода кнопок редактирования/добавления страницы соответствующим группам (журналисты, модераторы и тд).
+ существует проверка доступа, если авторизованный пользователь = автор страницы.
Razer
25 сентября 2014, 08:50
modx.pro
7
3 139
0