We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 34162
    • 1 Posts
    現在、以前紹介いただいたFDMを使用して簡易ブログを作成しています。

    元からの入力フォームをカスタマイズしていたのですが、日付表示がどうしてもおかしくなってしまいます。
    投稿画面から普通にカレンダーで日付を設定しても、記事の一覧ページの日付は全て「2009.2.25」、個別記事ページの日付は全て「1970.01.01」になってしまいます。

    入力が反映されないのも不思議なのですが、同じスニペットを記載してるはずの二箇所の日付も異なっていて、ハテナが飛んでいます。

    使用しているページとチャンクを記載しますので、よろしければ間違いをご指摘頂けますでしょうか。簡単なミスであれば、申し訳ないですが。。


    ◆記事追加用ページ========================================================
    [!FDM? &canmoderate=`Site Admins` &disableedit=`1` &disableunpublish=`1` &disabledelete=`1` &parent=`3` &aliastype=`article %createdon%`!]

    ◆記事一覧ページ==========================================================
    <div class="h2_text">
    <p>[*introtext*]</p>
    <!-- end #h2_text --></div>
    <p>[!Ditto? &startID=`3` &summarize=`5` &removeChunk=`Comments` &tpl=`ditto_blog` &paginate=`1` &extenders=`summary,dateFilter` &paginateAlwaysShowLinks=`1` &tagData=`documentTags` &rtcontent=`Comments,blogContent`!]</p>
    <div class="h3_text">
    <p class="next">Showing [+start+] - [+stop+] of [+total+] Articles
    [+previous+] [+pages+] [+next+]</p>
    <!-- end #h3_text --></div>

    ◆個別記事ページ==========================================================
    <div class="h2_text">
    <p class="introtext">[*introtext*]</p>
    <!-- end #h2_text --></div>

    <div class="add">
    [*content*]
    [*blogContent*]
    <p class="data">[[DateTimeJP? &format=`%Y.%m.%d` &type=`pub_date`]]</p>
    <!-- end #add --></div>

    ◆ditto_blog==============================================================
    <h3>[+title+]</h3>
    <div class="h3_text">
    <p class="data">[[DateTimeJP? &format=`%Y.%m.%d` &type=`pub_date`]]

    <span class="tag">[+tagLinks+]</span></p>
    <p class="summary">[+summary+]</p>
    <!-- end #h3_text --></div>

    ◆fdmEform================================================================= <div class="h2_text">

    [+validationmessage+]
    <form method="post" action="[~[*id*]~]" id="fdmForm">
    <fieldset>
    <legend>Renseignements complementaires</legend>
    <input type="hidden" name="formid" value="fdmForm" />
    <input type="hidden" name="fdmid" value="[+fdmid+]" eform="::0::" />
    <p><label for="pagetitle">タイトル</label>

    <input name="pagetitle" id="pagetitle" value="[+pagetitle+]" type="text" eform="Entrez un titre pour la page:string:1" /></p>

    <p><label for="pub_date">日付</label>

    <input name="pub_date" id="pub_date" type="text" value="[+pub_date+]" size="30" readonly="readonly" />
    <a onClick="nwpub_cal1.popup();" title="Choisir la date">
    <img align="absmiddle" src="manager/media/calendar/img/cal.gif" width="16" height="16" border="0" alt="Choisissez une date" /></a>
    <a onClick="document.forms[’fdmForm’].elements[’pub_date’].value=’’; return true;" >
    <img align="absmiddle" src="manager/media/style/MODx/images/icons/event3.gif" width="16" height="16" border="0" alt="Effacer la date"></a></p>
    </fieldset>

    <fieldset>
    <legend>Contenus</legend>

    <p><label for="content">要約</label>

    <textarea name="introtext" id="introtext" rows="5" cols="50" eform="Du texte:html:1">[+introtext+]</textarea></p>

    <p><label for="content">追記1</label>

    <textarea name="content" id="content" rows="5" cols="50" eform="Du texte:html:1">[+content+]</textarea></p>

    <p><label for="tvblogContent">追記2</label>

    <textarea name="tvblogContent" id="tvblogContent" rows="5" cols="50" type="text" eform="Entrez le contenu apparaissant dans le blog:string:1" />[+tvblogContent+]</textarea></p>

    <p><label for="tvdocumentTags">タグ</label>

    <input name="tvdocumentTags" id="tvdocumentTags" value="[+tvdocumentTags+]" type="text" eform="Entrez un titre pour la page:string:1" /></p>
    </fieldset>

    <input name="fdmsubmit" value="Soumettre" type="submit" />
    </form>

    <form id="abort" style="position:relative;top:-3em;left:20em;" method="post" action="[~[*id*]~]">
    <input type="submit" name="annuler" value="Annuler " />
    </form>

    <script language="JavaScript" src="manager/media/script/datefunctions.js"></script>
    <script type="text/javascript">
    var elm_txt = {}; // dummy
    var pub = document.forms["fdmForm"].elements["pub_date"];
    var nwpub_cal1 = new calendar1(pub,elm_txt);
    nwpub_cal1.path="[(base_url)]manager/media/";
    nwpub_cal1.year_scroll = true;
    nwpub_cal1.time_comp = true;
    </script>

    <!-- end #h2_text --></div>

      • 36592
      • 970 Posts
      多分、pub_dateが正しくDBに登録されていないようですね。
      恐らく「0(ゼロ)」になっているのでは? (pub_dateが「0」だと、出力結果は「1970.01.01」になりますから。)
      試したことが無いので、時間のあるときにやってみますね。

      それから一覧の各記事の日付が全部「2009.2.25」になってしまうのは、ditto_blogの
      [[DateTimeJP? &format=`%Y.%m.%d` &type=`pub_date`]]

      のことだと思いますが、これだとDittoが置かれているドキュメントの「pub_date」の値を持ってきてしまうので、
      全部同じになるのは当然のような気がします。
      各記事の値を持ってくるには、&dateSourceでpub_dateを指定して[+date+]を使うか、
      PHxを使って[+pub_date:date=`%Y.%m.%d`+]とかすれば行けそうな気がします。
      (PHxを使う例は未確認。また上記のとおり現状だと全部「1970.01.01」が表示されてしまうはず。)
        • 6350
        • 421 Posts
        保存は fdm.db.class.inc.php
        $this->fields[’editedon’]=time(); の下に7行追加
        	/***************************************************
        	  Saving/Updating FdmDocument (escape fields added)
        	****************************************************/
        	function Save(){ //escape added
        		global $modx;
        		$this->fields['editedon']=time();
        		list($d, $m, $Y, $H, $M, $S) = sscanf($this->fields['pub_date'], "%2d-%2d-%4d %2d:%2d:%2d");
        		$this->fields['pub_date'] = strtotime("$m/$d/$Y $H:$M:$S");
        		if($this->fields['pub_date'] <= $this->fields['editedon']) {
        			$this->fields['published'] = 1;
        		} else { 
        			$this->fields['published'] = 0; 
        		}


        読み出し fdm.class.inc.php
        $fields=array_merge($fields,$docObj->Gets()); の下に
        if ($fields[’pub_date’]!=0) $fields[’pub_date’]=strftime(’%d-%m-%Y %H:%M:%S’,$fields[’pub_date’]); を追加

        		function mergeFields(&$fields) {// fill the form with the content of the document
        			global $modx;
        			debug_run('enter mergeFields -fields:',$fields);
        			//debug_run('mergeFields -sessions:',$_SESSION['fdm']);
        			if ($_SESSION['fdm']['model']==0 && ($_SESSION['fdm']['action']=='add')) {
        				//debug_run('in mergeFields','model=0 action=add -> return');
        				return $fields;
        			}
        
        		  	if (!class_exists('FdmDocument')) include_once($modx->config['base_path'].'assets/snippets/FDM/includes/fdm.db.class.inc.php');
        			$docObj = new FdmDocument($_SESSION['fdm']['source']);
        			$fields=array_merge($fields,$docObj->Gets());
        			if ($fields['pub_date']!=0) $fields['pub_date']=strftime('%d-%m-%Y %H:%M:%S',$fields['pub_date']);
        			$modx->config['url']=$docObj->makeUrl();;
        			unset($docObj);

          • 36592
          • 970 Posts
          やっぱりpub_dateの「日付型式⇔UNIX時刻」の変換処理が存在してなかったんですね。
          unpub_dateも同様な処理が必要そうです。
            • 6350
            • 421 Posts
            FDMはサンプルテンプレートもしょぼいのでわかりにくいんですよね。

            c さんはまだ tvblogContent の意味がわかってなくて「追加記事」のつもりでをそのまま使ってるみたいだし laugh

            unpub_date はそのまま pub_date を置き換えて行を複製してもらったら大丈夫なはず?
              • 6350
              • 421 Posts
              記事一覧ページ
              Diito に &rtcontent= なんてオプションはありません。NewsPublisher のオプションです。
              [!Ditto? &startID=`3` &summarize=`5` &removeChunk=`Comments` &tpl=`ditto_blog` &paginate=`1` &extenders=`summary,dateFilter` &paginateAlwaysShowLinks=`1` &tagData=`documentTags` &rtcontent=`Comments,blogContent`!]

              日付を日本語形式で表示したい場合には Ditto オプション赤字部分で指定します
              [[Ditto? &startID=`3` &summarize=`5` &removeChunk=`Comments` &tpl=`ditto_blog` &paginate=`1` &extenders=`summary,dateFilter` &paginateAlwaysShowLinks=`1` &tagData=`documentTags` &language=`japanese-utf8` &dateFormat=`%Y年%m月%d日 (%a) `]]

              テンプレート(チャンク) ditto_blog はDateTimeJP を使わずに元の状態に戻して確認してください。
              自分で理解していないものを2つ以上組み合わせると原因がつかみづらくなります。

              あと、Ditto? &startID=`3`で指定したフォルダのページ設定で「キャッシュを生成」のチェックを消してもとのサンプルの使い方を参考にしないと思わぬところでつまづきま~す laugh
                • 33488
                • 429 Posts
                DateTimeJP どっかで聞いたことあるなと思ったら、作った本人だった :’(
                tkfmさんが仰ってる通りで、DittoとかWayFinderとか複数のドキュメントから生成するものには使えません。
                かなりショボイスニペットで、DBのdatetime値を文字列に変換できる機能ではあるのですがカレント(表示中)のドキュメントの日付系のデータにしか対応していない機能です(^^;

                あ、JPがついてるからないものもあるんですけど、機能的にはほぼ同じですが、そんな簡易なスニペットなので使いではありません。
                スニペットとはどんなものか? っていうサンプルとしては分かり易いとは思いますが・・・。

                ではでは、あとは皆さんにお任せ♪
                  • 34162
                  • 1 Posts
                  tkfmさん、dainitiさん

                  お返事ありがとうございます。無事に修正できました! laugh

                  オプションは全てのスニペットで指定できる訳じゃないんですね、
                  そのままコピペして使ってしまってました。
                  基本的なことが分かっておらずお恥ずかしい限りです。

                  「tvblogContent」は追記の位置づけだと思ってたんですが、何か
                  他の意味があるのでしょうか?削除するのも気がひけたのでそのまま
                  残していたんですが。


                  あとは入力部分をリッチテキスト化と追記リンクをいじるだけです。
                  また躓いたら助力をお願いするかと思いますが、その際はよろしく
                  お願いします~。
                    • 6350
                    • 421 Posts
                    Quote from: c at Mar 19, 2009, 08:15 AM

                    「tvblogContent」は追記の位置づけだと思ってたんですが、何か
                    他の意味があるのでしょうか?削除するのも気がひけたのでそのまま
                    残していたんですが。
                    たぶん ・・・ FDM 作者さんも追記の意味で使ってるような気もします (・_・) いや、そうではなくテンプレート変数の読み書きができるよって意味合いで入れているだけだと思います。

                    Quote from: c at Mar 19, 2009, 08:15 AM

                    あとは入力部分をリッチテキスト化と追記リンクをいじるだけです。
                    また躓いたら ・・・
                    じつは、「tvblogContent」 はここの部分に深くかかわっているのです。
                    テンプレート変数の 「tvblogContent」 のウィジェットで指定された 「RichText」の部分が TinyMCE を表示させるためのキーワードです。

                    <fieldset>
                    	<legend>Contenus</legend>
                    	<p>	<label for="content">Content of the page</label><br />
                    			<textarea name="content" id="content" rows="5" cols="50"  eform="Du texte:html:1">[+content+]</textarea>
                    	</p>
                    	<p>
                    		<label for="tvblogContent">Blog Content</label><br />
                    		<textarea name="tvblogContent" id="tvblogContent"  rows="5" cols="50"   type="text" eform="Enter the content of the blog:string:1" />[+tvblogContent+]</textarea>
                    	</p>
                    </fieldset>

                         ↓ とりあえず fdmEform の上記の部分を下のように置き換えると動作の理解に役立つと思います。
                    <fieldset>
                    	<legend>Contenus</legend>
                    	<label for="content">Content:[*blogContent*]</label>
                    </fieldset>

                    ただしこのままでは [+content+] の内容は書き換えできません。詳しくは
                    http://modxcms.com/forums/index.php/topic,33122.0.html を読んでください。
                    チョット説明が長くて自分でも見る気がしませんが (^。^)y-.。o○
                      • 34162
                      • 1 Posts
                      dainitiさん

                      お返事ありがとうございます。教えて頂いたページを拝見してリッチテキストにすることができました。
                      とても分かりやすかったです smiley