Евгений

Евгений

С нами с 18 марта 2015; Место в рейтинге пользователей: #411
Баха Волков
25 октября 2018, 15:57
2
+3
Эмм… Зачем так сложно? Устанавливаете pdoTools и:

MODX:
[[#[[*parent]].pagetitle]]

fenom:
{$_modx->resource.parent | resource : 'pagetitle'}

Причём fastField устанавливать не надо, в pdoTools он вшит
Николай
20 июня 2018, 16:16
1
0
Удалил строки:
if (mse2Config['page'] > 1) {
 mse2Config['page'] = '';
 mSearch2.Hash.remove('page');
 mSearch2.load();
  }
из файла /assets/components/msearch2/js/web/default.js
Теперь пагинация работает нормально в связке с кнопкой «Показать еще».
Григорий Коленько
26 февраля 2016, 12:55
2
0
Да, знаю. У меня для этого есть решение. Во первых мне очень не нравится, что этот сниппет работает через TV, поэтому я пишу алиасы ресурсов в properties ресурса. Зачем в бейбл вообще пользуются TV, мне не ясно.
Плагин:
<?php
switch ( $modx->event->name ) {
	case'OnDocFormRender':
	case 'OnDocFormSave':
		if ( $mode == 'new' && $modx->event->name == 'OnDocFormRender' ) {
			break;
		}
		$tvVar = $resource->getTVValue( 'babelLanguageLinks' );
		//web:92;ru:50

		$tvVarArr = explode( ";", $tvVar );

		$result  = array();
		$pagesid = array();
		foreach ( $tvVarArr as $v ) {
			$tmp               = explode( ":", $v );
			$result[ $tmp[0] ] = $tmp[1];
			$pagesid[]         = $tmp[1];
		}

		if ( $pages = $modx->getCollection( 'modResource', array( "id:IN" => $pagesid ) ) ) {
			foreach ( $pages as $page ) {
				$page->setProperties( array( "aliases" => $result ), 'babel' );
				$page->save();

			}

		}


		break;

}

И снипет, который расставляет плейсхолдеры.
<?php
$ids = explode( ",", $modx->getOption( 'input', $scriptProperties ) );

$context       = $modx->getOption( 'context', $scriptProperties, $modx->context->key );
$toPlaceholder = $modx->getOption( 'toPlaceholder', $scriptProperties, true );


if ( count( $ids ) == 1 && $modx->resource == $ids[0] ) {
	//если ресурс тот же что нам надо, то кончаем быстро :)
	$properties = $modx->resource->getProperties( "babel" );
	if ( isset( $toPlaceholder ) ) {
		$modx->setPlaceholder( "id_$ids[0]", $properties['aliases'][ $ids[0] ] );

	} else {
		return $properties;
	}

	return;
} else {

	$pages = $modx->getCollection( "modResource", array(
		"id:IN" => $ids
	) );
	$result = array();
	foreach ( $pages as $page ) {

		$properties = $page->getProperties( "babel" );

		if ( $toPlaceholder ) {
			$id               = $page->get( "id" );
			$result["id_$id"] = $properties['aliases'][ $context ];

		} else {
			$result[] = $properties['aliases'][ $context ];
		}
	}
	if ( $toPlaceholder ) {
		$modx->setPlaceholders( $result );

		return;
	} else {

		return implode( ",", $result );
	}

}

return;

Т.е. ты пишешь, к примеру:
[[getBabelAliasId?&input=`15,4`]]
и можешь вызывать сниппет так:
[[pdoMenu?
                &parents=`[[+id_4]]`
                &outerClass=`menu-before-outer`
                &tplHere=`menuRowHere`
                &tpl=`menuRow`
                &includeTVs=`after_menutitle`
                &tvPrefix=``
                ]]

 [[pdoMenu?
                        &parents=`[[+id_15]]`
                        &outerClass=`menu-main-outer`
                        &tplHere=`menuRowHere`
                        &tpl=`menuRow`
                        ]]
В результате, ты всегда в плейсхолдере получаешь айди ресурса из текущего контекста. Без лишних запросов