狠狠撸

狠狠撸Share a Scribd company logo
ニュースモジュールを
  作ってみよう
          2012年6月
          氷川 霧霞
     @kilica on Twitter
  http://jp.xoopsdev.com/
ニュースモジュール
bulletin
どんな機能が必要?
基本機能
? ニュース一覧(投稿日の新しい順)
? ニュース詳細
? ニュース投稿(編集)
? ニュース削除
? フィールドは、
  o   id(topic_id)
  o   タイトル(title)
  o   カテゴリ(category_id)
  o   本文(content)
  o   投稿者(uid)
  o   ニュース日時(newsdate)
  o   投稿日時(posttime)
どんな機能が必要?
詳細
? 記事のカテゴリ分類
? タイトル、カテゴリ、本文は入力必須項目。id, uid, 投稿日時は自動入力。
? カテゴリID付きの投稿URLをリクエストした場合、投稿画面でそのカテゴリが選択
    状態になっている

?   投稿?削除は管理者(かサイト運営者が設定したグループ)のみが操作できる

?   一覧および詳細画面での日時は「ニュース日時」が入っていれば「ニュース日時」、
    なければ「投稿日時」を使う。
?   「ニュース日時」が設定されている場合、「ニュース日時」になるまではそのニュー
    スを表示しない。ただし、管理者にのみは表示する。
カテゴリの設定
「カテゴリID付きの投稿URLをリクエストした場合、投稿画面でそのカテゴリが選択状
  態になっている」
http://localhost/xoops/html/modules/mynews/index.php?action=TopicEdit&category_id=2



actions/TopicEditAction.class.php
public function prepare()
{
     $req = $this->mRoot->mContext->mRequest;
     if($this->mObject->isNew()){
         $this->mObject->set('uid', Legacy_Utils::getUid());
         $this->mObject->set('category_id', $req-
           >getRequest('category_id'));
     }
}
管理者のみ投稿可能
投稿?削除は管理者(かサイト運営者が設定したグループ)のみが操作できる
templates/mynews_topic_list.html
<{if $xoops_isadmin}>
<ul class="hmenu">
  <li><a href="<{xoops_cooluri dirname=$dirname dataname=$dataname
   action=edit}>"><{$smarty.const._MD_MYNEWS_LANG_ADD_A_NEW_TOPIC}></a></li
   >
</ul>
<{/if}>
テンプレートの編集
一覧および詳細画面での日時は「ニュース日時」が入っていれば「ニュース日時」、な
 ければ「投稿日時」を使う。


ニュース日時は初期値を0にする
class/handler/topic.class.php
$this->initVar('newsdate', XOBJ_DTYPE_INT, 0, false);



テンプレートで表示する値を場合分けする
(class/handler/news.class.php で showDate みたいなメソッドを追加する方法もあり)
templates/mynews_topic_list.html
templates/mynews_topic_view.html
<{if $obj->getShow('newsdate')}>
  <{$obj->getShow('newsdate')|xoops_formattimestamp:m}>
<{else}>
  <{$obj->getShow('posttime')|xoops_formattimestamp:m}>
<{/if}>
表示期間の設定
「ニュース日時」が設定されている場合、「ニュース日時」になるまではそのニュースを
  表示しない。ただし、管理者にのみは表示する。


actions/TopicListAction.class.php
public function getDefaultView()
{
      ...
      $criteria=$this->mFilter->getCriteria();
      if($this->mRoot->mContext->mUser->isInRole('Site.Owner')===false){
         $criteria->add(new Criteria('newsdate', time(), '<'));
      }
     ???
}



actions/TopicViewAction.class.php

More Related Content

XOOPS Cube Conference 2012 Developer Workshop 4