特定の日時で本文を切り替える

質問全般・改善要望
返信する
kazuike
メンバー
メンバー
記事: 507
登録日時: 2009年8月12日(水) 12:53

特定の日時で本文を切り替える

投稿記事 by kazuike »

いつもお世話になっております。

中規模(リソースが数百件以上)のサイトで、
MODXの設定は弊社が行い、
MODXの仕組みに詳しくなく管理者権限もないお客様が使う。
という前提で…

特定の日時に、公開中のリソースの本文を入れ替える方法について、
アドバイスいただけますでしょうか?

■1)
現行リソースとは別に、新本文用のリソースを同じ階層に新規作成し、
現行リソースの公開終了日時と新リソースの公開開始日時をあわせておく。
という方法も考えましたが、
この方法では、リソースIDが変わってしまうため、
リソースIDでのリンクが切れてしまいます。


上記について、
エイリアスの重複を許可するようにグローバル設定を変更し、
新リソースのエイリアスを現行リソースと同じにして、
当該リソースへのリンクはリソースIDをやめてURLにする。
という方法も考えました。
取り急ぎの応急措置としては、この方法しか無いかと考えていますが、
  • エイリアスの重複を許可すると、重複して入力した場合に気づかない。
  • サイト全体として、リンク先にリソースIDとURLを混在させると、
    リソースの検索等で被リンクを探しにくくなる。管理が煩雑になる。
  • サイト全体として、リンク先をURLに統一すると、
    リンク操作が煩雑になる。エイリアス変更等のリンク張り替え作業が大きくなる。
等、諸々のデメリットがあると思われます。

■2)
現行リソースとは別に、2つのリソース(現本文用と新本文用)を新規作成し、
現行リソースの本文欄に、
[*content:id=リソースID*]
を、2つのリソース分入れ、
現本文用の公開終了日時と新本文用の公開開始日時をあわせておく。
という方法も考え試しましたが、
この方法だと、公開前のリソースからも読み込んでしまうらしく、
新旧両方の本文が表示されてしまいます。

…ということで、
現時点では、
上記2に替わる(公開前のリソースは読み込まない)スニペットを作るか、
これ専用のDittoのconfigをあらかじめ作っておいて、Dittoのタグを入れてもらう。
(この場合、必ず親子にするか、パラメータにIDを指定するかのどちらか)
等ぐらいしかないかと考えていますが、
もし、他にこういう方法があるよ。等、アドバイスいただければ助かります。

よろしくお願いいたします。



最初、上記のような文章を入力して「送信」したところ、どうもタイムアウトしていたらしく、
最初から全部入力し直しになりました。ショック!です。 :(
どうぞ、皆さまもお気をつけください。

開いた時刻とタイムアウト時間が表示されていれば親切だとは思いますが…やっぱり見ないかな
▼ウェブ屋のCMS→modxヒキダス流(備忘録)
http://d.hatena.ne.jp/hikidas_ikeda/
noka
メンバー
メンバー
記事: 94
登録日時: 2013年6月19日(水) 10:02

Re: 特定の日時で本文を切り替える

投稿記事 by noka »

こんばんは。

全くの見当違いかもしれませんが、偶然似たような処理をしたので一応、ご報告してみます。
参考にならなかったら申しわけございません。

構成は親子が前提として、
例えば、

親リソース
-子リソースA
-子リソースB

とします。

親リソースがアクセスされるウェブページの実体で、テンプレートには配下の公開リソースcontentをDittoで取り込む処理を書きます。
子リソースは部品(本文のみ)としてテンプレートはblankにしても良い感じです。
子リソースAの公開終了日と子リソースBの公開開始日を設定して、入れ替える感じです。・・・ダメでしょうか?
私はバナーの入れ替え等で利用しています。

デモサイトに超簡単なサンプルをつくりました。
http://140329221117-19575.evo.demo.modx.jp/testpage/

管理画面
http://140329221117-19575.evo.demo.modx.jp/manager/
(id:modx,pass:modx)


見当違いでしたら、申しわけございません。
私は、逆に[*conten:id=`値`*]という使い方は思いもしなかったので、参考になりました。

以上です。
kazuike
メンバー
メンバー
記事: 507
登録日時: 2009年8月12日(水) 12:53

Re: 特定の日時で本文を切り替える

投稿記事 by kazuike »

nokaさん
ありがとうございます。

やはり、Dittoを使う線が妥当な感じですね。
先日の投稿後、
取り急ぎ、以下のようなDittoのconfigファイル「combine.config.php」を作って、
[[Ditto?config=`combine`]]
で呼び出してもらうようにしました。

コード: 全て選択

if(!isset($paginate)) $paginate = 0;
if(!isset($display)) $display = 'all';
if(!isset($orderBy)) $orderBy='menuindex ASC';
if(!isset($noResults)) $noResults = ' ';
if(!isset($tpl)) $tpl = '@CODE:<div id="[+alias+]">
[+content+]
</div>';
その後、
タグの記述を簡単にするするように、
以下のようなスニペット「CombineSubs」を作ったりしています。
[[CombineSubs]]

コード: 全て選択

if(!isset($paginate)) $modx->event->params['paginate'] = 0;
if(!isset($display)) $modx->event->params['display'] = 'all';
if(!isset($orderBy)) $modx->event->params['orderBy'] ='menuindex ASC';
if(!isset($noResults)) $modx->event->params['noResults'] = '&nbsp;';
if(!isset($tpl)) $modx->event->params['tpl'] = '@CODE:<div id="[+alias+]">
[+content+]
</div>';
$output = $modx->runSnippet('Ditto', $modx->event->params);
return $output;
どちらの場合も、
全ての子リソースを呼び出す以外に、
「documents」パラメータを指定することで、特定のリソースを呼び出す等、
パラメータの指定が可能になるように考えてはいます。
例)
[[Ditto?config=`combine`&documents=`123,456`]]
[[CombineSubs?documents=`123,456`]]


コードは、実際に作ったものから若干省略している部分があります。
▼ウェブ屋のCMS→modxヒキダス流(備忘録)
http://d.hatena.ne.jp/hikidas_ikeda/
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: 特定の日時で本文を切り替える

投稿記事 by yama »

先の話になりますが、開発中の下書き機能を使って既存ページの更新予約を行なうことができるようになります。
返信する