#コンポーネントによる振り分け処理(未完成)
処理自体は主にphpで行う。
コンポーネントの外側の作成方法はこちら
##コンポーネントの登録
Plugin.php
public function registerComponents()
{
return [
'<プラグイン名>\<プロジェクト名>\Components\NewsList' => 'NewsList',
];
}
##振り分け処理
NewsList.php
<?php namespace Kobayashi\Corporate\Components;
use Cms\Classes\ComponentBase;
use <プラグイン名>\<プロジェクト名>\Models\News;
class NewsList extends ComponentBase
{
public function componentDetails()
{
return [
'name' => 'ニュース一覧',
'description' => 'ニュース一覧の表示'
];
}
public function defineProperties()
{
return [];
}
// ニュースごとに掲載先を変える処理
public function bySite()
{
// データの個数を取得
$count = News::select('id')->count();
// IDと内容、作成日時、振り分け先を取得
$json = News::select('id', 'content', 'created_at', 'site')->get();
// jsonファイルから配列に変換
$decode = json_decode($json, true);
// 格納する配列を定義
$homepageArr = [];
$arrId = [];
for ($i = 0; $i < $count; $i++)
{
// ホームページ用ニュースのIDを取得
$homepageId = $i+1;
// siteカラムのn番目のデータを取得
$arr = $decode[$i]["site"];
// siteの中身が空もしくは0、nullなら
if (!empty($arr))
{
// siteの中にhomepageという値が存在したら
if (in_array('homepage', $arr))
{
// homepageArr配列にホームページ用ニュースのIDを格納
array_push($homepageArr, $homepageId);
}
}
}
// 最新ニュースが先頭に来るよう降順に変更
$reverse = array_reverse($homepageArr);
return $reverse;
}
// database上のIDとbySite上で出したIDを比較し一致したものだけ返す
public function getNews($id)
{
return Report::where('id', '=', $id)->get();
}
// 日付のフォーマット変更
public function getDate($date)
{
return date("Y/m/d", strtotime($date));
}
}
##View
newslist>default.htm
// ID、内容、作成日時、振り分け先のデータ
{% for bysite in NewsList.bySite %}
// 上記で所得下データを変数にgetNewsに返す
{% for getnews in NewsList.getNews(bysite) %}
// IDの一致するものからフォーマットが変換された日付を表示
<h2>{{ Newslist.getDate(getnews.created_at) }}</h2>
// 内容の表示(<p>タグを抜いて)
<p>{{ getNews.content|raw }}</p>
{% endfor %}
{% endfor %}