シブリングの動作に関する要望

質問全般・改善要望
返信する
kazh
メンバー
メンバー
記事: 12
登録日時: 2010年2月26日(金) 20:18

シブリングの動作に関する要望

投稿記事 by kazh »

開発者様

下位リソースを作るときの「シブリング」時の動作について。
現在は、コンテナ属性のないリソースの中から、使用テンプレートを取ってくる処理になっていると思うのですが、

[ルート]
 └[大カテゴリ]※コンテナ属性
   └[小カテゴリ]※コンテナ属性
     └[記事]

↑こんな感じになっていた時、大カテゴリ内に新たな小カテゴリを作ろうとすると、小カテゴリはコンテナ属性を持っているため、常にデフォルトのテンプレートが選択されてしまいます。
自分で運用する分には良いのですが、運用担当者に任せる場合、使用テンプレートの切り替えは出来ればあまりさせたくありません。

とりあえず今はmutate_content.dynamic.phpの550目あたりを

コード: 全て選択

$sibl = $modx->getDocumentChildren($_REQUEST['pid'], 1, 0, 'template', 'isfolder=0', 'menuindex', 'ASC', 1);
if(!empty($sibl[0]['template'])) $default_template = $sibl[0]['template'];
else
{
	$sibl = $modx->getDocumentChildren($_REQUEST['pid'], 0, 0, 'template', 'isfolder=0', 'menuindex', 'ASC', 1);
	if(!empty($sibl[0]['template'])) $default_template = $sibl[0]['template'];
}
から

コード: 全て選択

$sibl = array(
	$modx->getDocumentChildren($_REQUEST['pid'], 1, 0, 'template', 'isfolder=0', 'menuindex', 'ASC', 1),
	$modx->getDocumentChildren($_REQUEST['pid'], 1, 0, 'template', 'isfolder=1', 'menuindex', 'ASC', 1),
	$modx->getDocumentChildren($_REQUEST['pid'], 0, 0, 'template', 'isfolder=0', 'menuindex', 'ASC', 1),
	$modx->getDocumentChildren($_REQUEST['pid'], 0, 0, 'template', 'isfolder=1', 'menuindex', 'ASC', 1),
);
for($i = 0; $i < count($sibl); $i++){
	if(!empty($sibl[$i][0]['template'])){
		$default_template = $sibl[$i][0]['template'];
		break;
	}
}
こんな感じに書き換えて使っています。
上記の優先順位の善し悪しはともかく、下位リソースがすでにあるときは、コンテナ属性の有無にかかわらず、なるべくそれを活かしてもらえるといいなー、という要望です。
または、上記のテンプレート決定時に、プラグインで割り込めるようになれば、それもまた良しだと思います。
毎回コアソースに手を入れるのはいやだーという、個人的なわがままなのですが。
ご検討くださいませ。
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: シブリングの動作に関する要望

投稿記事 by yama »

合理的ですね。次のリリースで反映させていただきます。

プラグインで反映する場合は、$contentをglobal宣言し、$content['template']に任意のテンプレートIDをセット、OnDocFormPrerenderにフックするとよいと思います。あまりスマートな書き方ではないですが、近い将来整理したいと思います。
返信する