Posted by nahainec on August 9, 2016 at 1:13pm
Drupal 7 を使っています。
記事を追加する際、投稿の情報 > 投稿日時を空白にしておくと保存時の時刻が使用されますが、これを投稿した時刻(初めて非掲載から掲載に変更した時刻)にすることは出来ないのでしょうか?
これまでは編集が終わって投稿オプション > 掲載のチェックをするときに投稿日時を空白にしていました。しかし空白にするのを忘れることも多く、自動的にできないかと思い始めました。
よろしくお願いします。
Comments
こんにちは。 可能ですが、少々手間がかかります。 まず、P
こんにちは。
可能ですが、少々手間がかかります。
まず、Publication Dateモジュールをインストールすれば、投稿日時の他に、掲載日時が保存されるようになります。
https://www.drupal.org/project/publication_date
次に、Rulesモジュールで、
「記事が更新された (After updating existing content)」際に、「投稿日時の値を掲載日時の値にする (Set a data value. Parameter: Data: [node:created], Value: [node:published-at])」という、ルールを作成します。
https://www.drupal.org/project/rules
Rulesモジュールの使い方は、下記のチュートリアルなど参考にされてみてください。
https://drupal.studio-umi.jp/blog/module/rules
Publication Dateモジュールなんてのがあるんですね
ありがとうございます。
Publication Dateモジュール、試しにテスト環境で色々いじってみましたが、これこそ私が求めていたものでした。一度非掲載にしてから再度掲載した場合の挙動も期待していた通りです。
こうなると欲が出て[node:created]を上書きするのではなく、[node:published]をそのまま表示に反映できないかと考えてしまいます。表示する時刻を[node:published]に変更することは可能でしょうか?
大変なようでしたらRulesモジュールの方法で行こうと思います。
お手数ですが、よろしくお願いします。
別の方法
[修正] 下記の内容、私の質問の読み間違いで、同じ機能ではありませんでした。失礼しました。
先日、ほぼ同じ内容の機能を次のような方法で実装しました。
・コンテンツタイプの設定でPublishing OptionsのCreate new revisionにチェックを入れます。こうするとノードの更新のたびに新しいリビジョンが作成されます。
・そのコンテンツにComputed Fieldを追加し、Computed Codeを以下のようにします。
$entity_field[0]['value'] = format_date($entity->changed, 'short');欠点としてはリビジョンがどんどん作成されるので、大きなサイトでは定期的に不要になったリビジョンを消す必要があります。
恐らくSumpeiさんが書かれている方法のほうがデータとしてはきれいになると思いましたが、参考までと思い、投稿しました。
NobuT
あまりないケースですが、上のRulesの例だと一時的に掲載
あまりないケースですが、上のRulesの例だと一時的に掲載 -> 非掲載に変更後に再度掲載に変えた場合、
投稿日時が再度上書きされてしまいます。
サイトマップやRSSフィードなどで投稿日時を元にしているデータを配信している場合、
それらを使っている側のユーザーやシステムに予期しない影響を与える可能性がありますので、
もうちょっとRulesの発動条件をキツくしたほうがいいかもしれません。
nahainecさん、 Display
nahainecさん、
Display Suiteモジュールをインストールし、公開日時を表示させたいコンテンツタイプに、レイアウトを設定すれば、各コンテンツの表示設定から公開日時が選択できるようになります。
http://www.gennai3.com/techinfo/cms/acquia/module/content-display/displa...
blauerbergさん、
おっしゃる通りで、ルールを厳しくする必要がありそうです。Publication Dateモジュールでは、初めて公開された日時が保存され、自動で上書きはされませんが、上記のルールでは非公開の状態で二度保存した場合、作成日時に空欄の公開日時が入ってしまいます。
「空欄の公開日時」が「値を持った」時、等の条件を入れておくと避けられるかと思います。