Владимир

Владимир

С нами с 28 декабря 2012; Место в рейтинге пользователей: #53
Василий Столейков
22 июня 2016, 13:34
3
+1
Для себя на память выложу решение на Fenom чтобы снова не искать так долго:
'where' => '{ "id:IN":['~$comment_childrens~'] }',
Антон
11 июня 2016, 15:19
2
+1
Я у себя реализовал вот это решение (случайно нактнулся на просторах интернета):
Система тегов: myitstuff.ru/32-tagging-site-on-modx
Облако тегов: myitstuff.ru/36-modx-tag-cloud
Максим Кузнецов
09 июня 2016, 12:44
1
+3
Сколько не вчитывался, так и не понял, что из этого «готовое решение». Ну, допустим.

Раз вы не знали о существовании такой особенности в MODX'e, то, подозреваю, не знали и о том, что такие ссылки в СЕО являются дублями страниц и от них нужно бы избавляться. Примерно таким плагином:

<?php
	if ($modx->event->name != "OnHandleRequest" || $modx->context->key == 'mgr') {
		return;
	}

	//Если не главная страница вида '/'
	if (strtok($_SERVER['REQUEST_URI'], '?') != '/') {
		//Разбиваем ури на основную ссылку и гет-параметры
		$request_uri = explode("?", $_SERVER['REQUEST_URI']);
		$uri = $request_uri[0];
		
		//Очищаем от слеша в начале uri
		$uri = substr($uri, 1);
		
		//Если запрос идет  к index.php, то заменяем страницы вида /index.php?id= на чпу-шные
		if ($uri == 'index.php') {
			$id = intval($_GET['id']);
			
			//Если ресурс с таким id существует - редиректим
			if ($modx->getCount('modResource', array('id' => $id))) {
				$modx->sendRedirect($modx->makeUrl($id), array('responseCode' => 'HTTP/1.1 301 Moved Permanently'));
			}
			else {
				//Если url не чпу, то обработка OnPageNotFound не срабатывает и необходимо дублировать определение страницы 404
				$error_id = intval($modx->getOption('error_page'));
				
				//Если 404 страница объявлена в системных настройках и существует, то редиректим
				if ($error_id > 0 && $modx->getCount('modResource', array('id' => $error_id))) {
					$redirect_page = $modx->makeUrl($error_id);
				}
				//Иначе перебрасываем на главную страницу
				else {
					$start_id = intval($modx->getOption('site_start'));
					$redirect_page =$modx->makeUrl($start_id);
				}
				
				$modx->sendRedirect($redirect_page, array('responseCode'  => 'HTTP/1.1 404 Not Found'));
			}

		}
	
	}
Николай Загумённов
08 июня 2016, 23:50
4
+2
Спасибо Паше за помощь. Открыл для себя Ext.ComponentMgr.onAvailable.

Вот такой плагин получился и не надо создавать никаких comments2.grid.js.
<?php
switch ($modx->event->name) {
    case 'OnBeforeManagerPageInit':
        
        if ($action['namespace'] == 'tickets' && $action['controller'] == 'index') {
            $modx->controller->addHtml("<script type='text/javascript'>
                Ext.ComponentMgr.onAvailable('tickets-home-tabs', function() {
                    // Тут можно переопределять все что угодно
                });
            </script>");
        }
        break;
}
Максим Кузнецов
06 июня 2016, 14:40
2
+2
Скорее всего, придется расширять функцию saveComment в
core/components/tickets/model/tickets/tickets.class.php

Если использовать феном, то можно обойтись и без сниппета:
{foreach $thumbs | split as $thumb}
	<!--Получаем основное изображение из превью 120х120, к примеру -->
	
	<a href='{$thumb | replace : ".w120.h120" : ""}'>
		<img src='{$thumb}' width='120' height='120' />
	</a>
{/foreach}
Станислав
29 мая 2016, 11:25
1
+2
Вот решение

$(document).ready(function() {
            var $container = $(".masonry-container");
        	$container.imagesLoaded(function () {
        		$container.masonry({
        			columnWidth: 1,
        			itemSelector: ".item"
        		});
        	});
        });
        $(document).on('pdopage_load', function() {
        	var $container = $(".masonry-container");
// вся вишка сводится к добавлении этой строки
        	$container.masonry('reloadItems');
//конец добавленной строки
            $container.imagesLoaded(function () {
        		$container.masonry({
        			columnWidth: 1,
        			itemSelector: ".item"
        		});
        	});
        });
Влад
28 мая 2016, 13:04
1
+1
решается через параметр снипетта &optionFilters=`{«ssss:<»:200}`
Николай Загумённов
25 мая 2016, 11:12
3
0
Путь до картинки можно менять не модификаторами во время, а при сохранении тикета, плагином на событие OnDocFormSave.
Заодно проверяет поле content на наличие картинок с таким путём и меняет 0 на id.
Может кому пригодится.
Мне пригодился этот пост. Спасибо за него.

<?php
switch ($modx->event->name) {

    case 'OnDocFormSave':
        if (is_object($resource) && is_array($resource->_fields)) {
            $data = $resource->_fields;
            $resource_id = $data['id'];
            // $modx->log(1, print_r($data, 1));

            $flds = $tv_values = array();
            foreach ($data as $key => $value) {
                if ($key == 'item_image')  {
                    $tv_id = 2; // id твшки с картинкой

                    $value = trim($value);
                    $tv_value = str_replace('assets/images/tickets/0', 'assets/images/tickets/' . $resource_id, $value);
                }
                if ($key == 'content') {
                	$content = str_replace('assets/images/tickets/0', 'assets/images/tickets/' . $resource_id, $value);
                }
            }
            if (!empty($content)) {
            	$res_obj = $modx->getObject('modResource',$resource_id);
            	$res_obj->set('content', $content);
            	$res_obj->save();
            	unset($res_obj);
            }
            // пишем в таблицу modTemplateVarResource
            if (!empty($tv_value)) {
                //$modx->log(1, print_r($tv_values, 1));

                	if (!$tv_obj = $modx->getObject('modTemplateVarResource', array(
                        'tmplvarid' => $tv_id,
                        'contentid' => $resource_id,
                    ))) {
                        $tv_obj = $modx->newObject('modTemplateVarResource');
                    }

                    $tv_obj->fromArray(array(
                        'tmplvarid' => $tv_id,
                        'contentid' => $resource_id,
                        'value' => $tv_value,
                    ));
                    $tv_obj->save();
                    // $modx->log(1, print_r($tv_obj->toArray(), 1));

                    unset($tv_obj);
            }
        }
    break;
}
Максим Кузнецов
21 мая 2016, 00:14
3
+4
Можно решить стандартным jevix'ом примерно так:

<?php
	if ($modx->event->name == 'OnDocFormSave') {
		$template = $resource->get('template');
		
		if ($template != 0) {
			$id = $resource->get('id');

			//В наборе параметров отключены неугодные теги аля script, iframe и прочие
			$jevixParams = $modx->getObject('modPropertySet',array('name'=>'Ticket'));
			$jevixOptions = $jevixParams->getProperties();

			//content
			if (strlen($content = $resource->getContent()) > 0) {
				$jevixOptions['input'] = $content;
				$content = $modx->runSnippet('jevix', $jevixOptions);
				$resource->setContent($content);
				
			}
			
			switch ($template) {
				//Шаблон с доп. тв, которое нужно обработать
				case 7:
					if (strlen($custom_tv = $resource->getTVValue('custom_tv')) > 0) {
						$jevixOptions['input'] = $custom_tv;
						$custom_tv = $modx->runSnippet('jevix', $jevixOptions);
						
						$resource->setTVValue('custom_tv', $custom_tv);
					}
					
				break;
				
			}
		}
	
		
		$resource->save();
	}