0
0

More than 3 years have passed since last update.

OctoberCMSによるComponent作成

Last updated at Posted at 2020-03-09

コンポーネントによる振り分け処理(未完成)

処理自体は主に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 %}



0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0