1: 2012-03-27 (火) 19:23:32 admin ソース
Line 1: Line 1:
 +*お問い合わせモジュールとして使う [#bb0acbaa]
 +xCCK は項目を自由に追加できるため、お問い合わせモジュールに使えるのではないかと考える方もいらっしゃるかもしれません。
 +実際、お問い合わせモジュールとして利用可能なのですが、それには埔里ロードを使ったやや高度なカスタマイズが必要となります。
 +**お問い合わせモジュールとして必要な機能 [#a69c61b4]
 +-お問い合わせフォームで入力項目を自由に設定できる
 +-モジュールにアクセスすると入力画面を表示する
 +-権限:ゲストによる投稿が可能
 +-権限:管理者はお問い合わせの内容を閲覧できるが、管理者以外は閲覧できない
 +-お問い合わせ入力後、通知のメールを管理者に、受領のメールを送信者に送る
 +-お問い合わせ入力後、トップページに遷移する
 +-複数のお問い合わせフォームを設定できる
 +
 +**必要な機能の実現 [#yab0c679]
 +
 +***お問い合わせフォームで入力項目を自由に設定できる [#ma02a46a]
 +xCCK の標準機能として可能。
 +
 +***モジュールにアクセスすると入力画面を表示する [#r7f4953f]
 +xCCK は、モジュールトップにアクセスすると一覧画面(action=PageList)に遷移する。入力画面に遷移するには、管理画面の xCCK の「一般設定」「モジュールトップのアクション名」で「Edit」を選ぶ。
 +
 +***権限:ゲストによる投稿が可能 [#jb1233bd]
 +xCCK は単独で使う場合、ログインユーザでないと投稿できない。
 +ゲストでも投稿できるようにするには、lecat(コアのextras/extra_modules 内に同梱)などのカテゴリ管理モジュールを使う。
 +カテゴリ管理モジュールインストール後、管理画面の xCCK の「一般設定」「アクセス管理モジュール」でカテゴリモジュールを選ぶ。
 +カテゴリモジュールでカテゴリを作成し、ゲストに編集権限を与える。
 +
 +***権限:管理者はお問い合わせの内容を閲覧できるが、管理者以外は閲覧できない [#wfefb436]
 +投稿権限同様、カテゴリモジュールでゲストに閲覧権限を与えないよう設定する。
 +
 +***お問い合わせ入力後、通知のメールを管理者に、受領のメールを送信者に送る [#lbbf3bc6]
 +この制御にはプリロードを使う。
 +
 +***お問い合わせ入力後、トップページに遷移する [#we3f5104]
 +xCCK は入力後、詳細表示画面(action=PageView)に遷移するようになっている。権限管理上、これは都合が悪い(ほかのユーザの入力内容をゲストでも見れてしまう)。そのため、トップページに遷移させる。
 +***複数のお問い合わせフォームを設定できる [#h8bbbc85]
 +xCCK は複製可能なので、フォームごとに複製して対応する。
 +
 +**プリロードサンプル [#ce9331ed]
 +{XOOPS_MODULE_PATH}/xcck/preload/Contact_Notification.class.php
 + <?php
 + if (!defined('XOOPS_ROOT_PATH')) exit();
 + class Contact_Notification extends XCube_ActionFilter
 + {
 +   public function preBlockFilter()
 +   {
 +     $this->mRoot->mDelegateManager->add('Module.contact.Event.Add.page', array(&$this, 'sendNotification'));
 +     $this->mRoot->mDelegateManager->add('Module.contact.Event.GetForwardUri.Success', array(&$this, 'forward'));
 +   }
 +
 +   public function sendNotification(&$obj)
 +   {
 +     $contentObj = new Contact_PostContent($obj);
 +     $content = $contentObj->getContents();
 +     Libson_Utils::call(
 +       'sendMail',
 +       $obj->getShow('title')._MD_CONTACT_NOTIF_TITLE_POSTFIX,
 +       Legacy_Utils::renderUri($obj->getDirname(), $obj->getDataname(),$obj->get('page_id'))."\n\n".
 +       _MD_CONTACT_NOTIF_CONSULTER.' : '. $obj->getShow('title')."\n\n". $content,
 +       $this->_getSystemConfig('adminmail')
 +     );
 +
 +     Libson_Utils::call(
 +       'sendMail',
 +       _MD_CONTACT_NOTIF_SENDER_POSTFIX,
 +       _MD_CONTACT_NOTIF_THANKS. "\n\n". $content,
 +       $obj->get('email')
 +     );
 +   }
 +
 +   public function forward(&$obj)
 +   {
 +     XCube_Root::getSingleton()->mController->executeRedirect(XOOPS_URL.'/', 5, _MD_CONTACT_MESSAGE_RECEIVE_SUCCESSFULLY);
 +   }
 +
 +   protected function _getSystemConfig($key, $mid=0)
 +   {
 +     $handler = xoops_gethandler('config');
 +     $cri = new CriteriaCompo();
 +     $cri->add(new Criteria('conf_modid', $mid));
 +     $cri->add(new Criteria('conf_name', $key));
 +     $configs = $handler->getConfigs($cri);
 +     if(count($configs)===1){
 +       $conf = array_shift($configs);
 +     }
 +     else{
 +       exit(); //invalid case
 +     }
 +     return $conf->getConfValueForOutput();
 +   }
 + }
 +
 + <?php
 + class Contact_PostContent
 + {
 +   protected $_mData = null;
 +
 +   public function __construct($obj)
 +   {
 +     $obj->loadDefinition();
 +     $this->_mData = $obj;
 +   }
 +
 +   public function getContents()
 +   {
 +     $content = '';
 +     foreach($this->_mData->mDef as $def){
 +       if($def->get('field_type')==Xcck_FieldType::CHECKBOX){
 +         $pamphletArr = $this->_mData->showField($def->get('field_name'));
 +         $content .= $def->getShow('label') .' : '. implode(',',$pamphletArr['checked']). "\n\n";
 +       }
 +       else{
 +         $content .= $def->getShow('label') .' : '. $this->_mData->get($def->get('field_name'))."\n\n";
 +       }
 +     }
 +     return $content;
 +   }
 + }
 + ?>


トップ   差分 バックアップ 複製 名前変更 リロード印刷に適した表示   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom Powered by xpWiki
Counter: 3339, today: 2, yesterday: 0