Павел Гвоздь

Павел Гвоздь

С нами с 31 мая 2015; Место в рейтинге пользователей: #4
26 августа 2015, 10:41
+2
Супер! Этого очень не хватало в debugParser!
Тоже, кстати, уже 2ой сайт делаю исключительно на Fenom! Счастью нет предела, до сих пор вызывает радость то, насколько грамотно можно построить структуру шаблона с использованием шаблонизатора, а не тормозных MODX тегов!
24 августа 2015, 22:09
+1
Василий, я конечно не в тему поинтересуюсь, но создавать отдельный топик тоже не хочется. Ты как-то писал о том, что в будущем сделаешь курс по ExtJS, я очень жду до сих пор и хотелось бы узнать — а ждать ли вообще?)
24 августа 2015, 13:51
1
0
Всё-же немного поторопился публиковать сниппет. Перед последней строкой return $return; должно быть вот это:
$MobileDetect->saveSettings( $return );

Итого, более правильный код сниппета вот:
<?php
if( !$MobileDetect = $modx->getService('mobiledetect', 'MobileDetect', MODX_CORE_PATH . 'components/mobiledetect/') ) {return;}


$key = $MobileDetect->config['force_browser_variable'];

$device = !empty($_GET) && array_key_exists($key, $_GET)
		? $modx->stripTags($_GET[$key])
		: '';

if( empty($device) )
{
	$device = $MobileDetect->getSettings();
}

if( empty($device) )
{
	$detector = $MobileDetect->getDetector();
	
	if( $detector->isMobile() )
	{
		$return = 'mobile';
	}
	else {
		$return = 'standard';
	}
}
else {
	$return = $device;
}

$MobileDetect->saveSettings( $return ); // ставим печеньку

return $return;

Советую, для корректной работы с мультиязыками использовать системную настройку «session_cookie_path». Значение данной настройки должно быть "/" (без кавычек).
24 августа 2015, 12:49
0
Как будет время покопаю, думаю. Пока решил проблему, вроде, небольшим костылём.
24 августа 2015, 12:48
1
+1
Отключил в настройках плагин MobileDetect. Использую сниппет, который определяет средствами MobileDetect девайс, в сочетании с Феном. В начале чанка «layout» вставил такой код:
<?php
if( !$MobileDetect = $modx->getService('mobiledetect', 'MobileDetect', MODX_CORE_PATH . 'components/mobiledetect/') ) {return;}


$key = $MobileDetect->config['force_browser_variable'];

$device = !empty($_GET) && array_key_exists($key, $_GET)
		? $modx->stripTags($_GET[$key])
		: '';

if( empty($device) )
{
	$device = $MobileDetect->getSettings();
}

if( empty($device) )
{
	$detector = $MobileDetect->getDetector();
	
	if( $detector->isMobile() )
	{
		$return = 'mobile';
	}
	else {
		$return = 'standard';
	}
}
else {
	$return = $device;
}

$MobileDetect->saveSettings( $return ); // ставим печеньку

return $return;
Внимание! Сниппет будет работать только с установленным компонентом MobileDetect.

Советую, для корректной работы с мультиязыками использовать системную настройку «session_cookie_path». Значение данной настройки должно быть "/" (без кавычек).
24 августа 2015, 10:49
0
Если кто-то сталкивался с этим, посоветуйте пожалуйста, как решить можно. Это очень важно, друзья, в ближайшее время.
23 августа 2015, 16:01
0
Пример обработки JSON поля средствами Fenom:
{set $video_json = $modx->fromJSON($_modx->resource.video)}

{if !empty($video_json['video'])}
	<iframe width="860" height="650" src="{$video_json['video']}" frameborder="0" allowfullscreen></iframe>
{else}
	Видео нет
{/if}
23 августа 2015, 09:04
+2
Обязательно чуть позже напишу пример того, как средствами Феном вывести видео на странице.
23 августа 2015, 09:01
0
Panorama так и не понимает ссылки такого вида. По поводу «зачем 2 класса», Вы сами ответили на свой вопрос. Один для того, если не введен ключ апи, второй чтобы получать название и описание.

По полям, которые ниже поля с видео — эти поля каждый создает сам, ровно как и поле с типом videoGallery, поэтому вместо «заполняется автоматически», каждый для себя может написать что угодно. А может вообще не создавать эти поля, а выводить ту-же самую информацию используя возможности Fenom. Фактически, эти 4 поля каждый создает (или не создаёт) сам для своего же удобства. Кому удобнее хранить всё в одном json поле — обходится только первым полем. Единственное я скрыл поле с массивом json, наверное всё же нужно было оставить его для наглядности того, что оно есть?

Данные запрашиваются при событии jquery — «input». А при сохранении срабатывает плагин, который удаляет старые не используемые изображения из папки, оставляя только то, что используется в Json массиве в поле с типом «videoGallery».
21 августа 2015, 14:09
0
Супер! Спасибо, Василий!
21 августа 2015, 13:49
0
Можешь не верить, но я задумываюсь. По крайней мере стараюсь.

Перед тем, как ты ответил, я обновил предыдущий пост и написал, как раз о том, о чём написал ты. Дело не в этом, Василий, я это прежде всего проверил.

Вот так тоже самое:
{$_modx->runSnippet('MinifyX', [
	'minifyCss'			=> 1,
	'registerCss'		=> '1',
	'cssSources'		=> '
		' ~ $_modx->config.assets_url ~ 'components/themebootstrap/css/bootstrap.min.css,
		' ~ $_modx->config.assets_url ~ 'components/themebootstrap/css/add.css
	',
	'minifyJs'			=> 1,
	'registerJs'		=> '1',
	'jsSources'			=> '
		' ~ $_modx->config.assets_url ~ 'components/themebootstrap/js/bootstrap.min.js
	'
])}
21 августа 2015, 13:39
1
0
Вот так если Minifyx вызвать в чанке Theme.BootstrapHead, то воспроизводится:

{$_modx->runSnippet('MinifyX', [
	'minifyCss'			=> 1,
	'cssPlaceholder'	=> 'minifyxCss',
	'registerCss'		=> 'placeholder',
	'cssSources'		=> '
		' ~ $_modx->config.assets_url ~ 'components/themebootstrap/css/bootstrap.min.css,
		' ~ $_modx->config.assets_url ~ 'components/themebootstrap/css/add.css
	',
	'minifyJs'			=> 1,
	'jsPlaceholder'		=> 'minifyxJs',
	'registerJs'		=> 'placeholder',
	'jsSources'			=> '
		' ~ $_modx->config.assets_url ~ 'components/themebootstrap/js/bootstrap.min.js
	'
])}

{$_modx->getPlaceholder('minifyxCss')}
{$_modx->getPlaceholder('minifyxJs')}

Обновлено: Но дело не в cssPlaceholder/jsPlaceholder, и без них тоже самое происходит.
21 августа 2015, 10:50
0
Ещё, если в настройках указано «cache_resource=1» (по сути, по-умолчанию), то при кешированном вызове сниппета через $_modx->runSnippet при первой загрузке после обновлённого кеша сниппет отрабатывает, а при последующих он как-будто вообще не выполняется. Даже из кеша. Это, я так понимаю, точно баг?
21 августа 2015, 10:45
0
Спасибо большое, Василий. Я вот иногда замечаю такое, что если на странице или в шаблоне прописано только {include 'test'} или {extends 'test'}, то он не парсит его, а выводит прям как есть текстом. Это глюк или я что-то не пойму?

Обновлено: А вот если ниже дописать {block 'test'} {/block}, то всё приходит в норму и Феном включается.
19 августа 2015, 07:13
0
Не знаю насколько правильно написан этот сниппет. Может Василий увидит — поможет, посоветует.

if( !$MobileDetect = $modx->getService('mobiledetect', 'MobileDetect', MODX_CORE_PATH . 'components/mobiledetect/') )
{
	return;
}

$key = $MobileDetect->config['force_browser_variable'];

$device = !empty($_GET) && array_key_exists($key, $_GET)
		? $modx->stripTags($_GET[$key])
		: '';

if( empty($device) )
{
	$device = $MobileDetect->getSettings();
}
else {
	return $device;
}

if( empty($device) )
{
	if( $MobileDetect->getDetector()->isMobile() )
	{
		return 'mobile';
	}
	else {
		return 'normal';
	}
}
else {
	return $device;
}
18 августа 2015, 19:47
+3
Можно написать один хедер и разделить его на 2 версии. А если этот компонент использовать в сочетании с Феном, то можно сделать гораздо больше и грамотнее.
17 августа 2015, 22:09
+1
Вот за это спасибо, Василий. Долго думал, как лучше сделать проверку и цикл while почему-то не рассматривал, как вариант. После твоих слов сразу в голову пришёл while. Поправил.
17 августа 2015, 21:03
0
Разве в index.php не происходит тоже самое?)

К слову:
Это все делается в 5 строчек
Тем способом, которым воспользовался я это можно сделать в 3 строчки:
define('MODX_API_MODE', true);
require_once dirname(__FILE__) . '/index.php';
$modx->getService('error','error.modError');
Это если Вам нравится делать всё компактно.
17 августа 2015, 20:45
0
А в чём отличие Вашего метода подключения и того, что у меня, если не считать множества проверок на существование файла index.php в моём скрипте?

Мне действительно интересно, может я что-то делаю не так…
17 августа 2015, 19:40
0
Перепишите для себя. Я для себя писал и мне удобно, чтобы скрипт можно было сунуть куда-нибудь.