2017 © Pedro PelĆ”ez
 

module module-crud

image

netcore/module-crud

  • Monday, July 16, 2018
  • by netcorelv
  • Repository
  • 5 Watchers
  • 0 Stars
  • 1,733 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 5 Open issues
  • 30 Versions
  • 49 % Grown

The README.md

Netcore CMS - CRUD module.

Pre-installation

This package is part of Netcore CMS ecosystem and is only functional in a project that has following packages installed:, (*1)

  • https://github.com/netcore/netcore
  • https://github.com/netcore/module-admin
  • https://github.com/nWidart/laravel-modules

Installation

composer require netcore/module-crud

You need to add CRUDModel and CRUDController trait to your model and controller., (*2)

Controller:, (*3)

<?php

namespace App\Http\Controllers;

use App\Article;
use Modules\Crud\Traits\CRUDController;

class ArticlesController extends Controller
{
    use CRUDController; // <- This trait is required.

    /**
     * CRUD model.
     *
     * @var \Illuminate\Database\Eloquent\Model
     */
    protected $model;

    /**
     * ArticlesController constructor.
     */
    public function __construct()
    {
        $this->model = app(Article::class); // <- Set model.
    }
}

Model:, (*4)

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Modules\Crud\Traits\CRUDModel;

class Article extends Model
{
    use CRUDModel; // <- This is required

    /**
     * Mass assignable fields. 
     *
     * @var array
     **/
    protected $fillable = [
        'is_published',
        'views',
    ];

    .... Relations etc ...
}

Datatable configuration

By default, datatable columns are equal to mass-assignable fields, but you can easily configure everything., (*5)

First of all you need to create presenter, (*6)

<?php

namespace App\Presenters;

use Modules\Crud\Contracts\DatatablePresenterContract;

class ArticleModuleDatatablePresenter implements DatatablePresenterContract
{
    /**
     * Get the datatable columns config/mapping.
     *
     * @return array
     */
    public function getDatatableColumns(): array
    {
        return [
            'id'           => 'ID',
            'is_published' => 'Is published',
            'title'        => [
                'title'      => 'Article title', // column title
                'data'       => 'title', // column data field
                'name'       => 'translations.title', // SQL column name
                'searchable' => true, // Is searchable?
                'orderable'  => true, // Is orderable?
            ],
            'created_at'   => 'Added at',
        ];
    }

    /**
     * Get the list relations that should be eager loaded.
     *
     * @return array
     */
    public function eagerLoadableRelations(): array
    {
        return ['translations'];
    }

    /**
     * Get the columns that should not be escaped.
     *
     * @return array
     */
    public function getRawColumns(): array
    {
        return ['is_published'];
    }

    /** -------------------- Column modifiers -------------------- */

    /**
     * Modify is_published column.
     *
     * @param $row
     * @return string
     */
    public function isPublishedModifier($row)
    {
        $labelClass = $row->is_published ? 'success' : 'danger';
        $labelText = $row->is_published ? 'Yes' : 'No';

        return "<span class=\"label label-{$labelClass}\">{$labelText}</span>";
    }
}

Then you need to override/set this presenter in your CRUD model:, (*7)

class Article extends Model
{
    use CRUDModel;

    ...

    /**
     * Get the presenter class for datatable.
     *
     * @return string
     */
    public function getDatatablePresenter(): string
    {
        return \App\Presenters\ArticleModuleDatatablePresenter::class;
    }
}

That's it! Datatable now will use columns/config from presenter., (*8)

Translatable fields

This module can also save translatable fields., (*9)

First install module-translate, (*10)

Then you need to create a translatable model, with Translatable and SyncTranslations traits. After that, just add $translationModel and $translatedAttributes and the CRUD module will take care of the rest., (*11)

class FoodType extends Model
{
    use Translatable, SyncTranslations, CRUDModel;

    protected $fillable = [
        'example_1',
        'example_2',
        'example_3',
        'example_4',
    ];

    /**
     * @var string
     */
    public $translationModel = FoodTypeTranslation::class;

    /**
     * @var array
     */
    public $translatedAttributes = [
        'name',
    ];

    /**
     * @var array
     */
    protected $with = ['translations'];
}

Files

If you want to add files to the CRUD model, you need to implement StaplerableInterface and add EloquentTrait, (*12)

After that, add the file field with $this->hasAttachedFile() and you're good to go, (*13)

class TestFiles extends Model implements StaplerableInterface
{
    use CRUDModel, EloquentTrait;

    /**
     * @var array
     */
    protected $fillable = ['image'];

    /**
     * TestFiles constructor.
     * @param array $attributes
     */
    public function __construct(array $attributes = array())
    {
        $this->hasAttachedFile('image', [
            'url'    => '/uploads/portfolio/:id_partition/:filename',
        ]);

        parent::__construct($attributes);
    }

}

The Versions

16/07 2018

dev-master

9999999-dev

  Sources   Download

The Requires

 

by Jānis Blaus

16/07 2018

v1.0.5

1.0.5.0

  Sources   Download

The Requires

 

by Jānis Blaus

16/07 2018

1.0.x-dev

1.0.9999999.9999999-dev

  Sources   Download

The Requires

 

by Jānis Blaus

16/07 2018

v1.0.3

1.0.3.0

  Sources   Download

The Requires

 

by Jānis Blaus

16/07 2018

v1.0.4

1.0.4.0

  Sources   Download

The Requires

 

by Jānis Blaus

16/07 2018

v1.0.2

1.0.2.0

  Sources   Download

The Requires

 

by Jānis Blaus

16/07 2018

dev-column-order

dev-column-order

  Sources   Download

The Requires

 

by Jānis Blaus

13/04 2018

v1.0.1

1.0.1.0

  Sources   Download

The Requires

 

by Jānis Blaus

12/02 2018

v1.0.0

1.0.0.0

  Sources   Download

The Requires

 

by Jānis Blaus

06/02 2018

0.2.x-dev

0.2.9999999.9999999-dev

  Sources   Download

The Requires

 

by Jānis Blaus

06/02 2018

v0.2.8

0.2.8.0

  Sources   Download

The Requires

 

by Jānis Blaus

25/01 2018

v0.2.7

0.2.7.0

  Sources   Download

The Requires

 

by Jānis Blaus

28/12 2017

v0.2.6

0.2.6.0

  Sources   Download

The Requires

 

by Jānis Blaus

28/12 2017

v0.2.5

0.2.5.0

  Sources   Download

The Requires

 

by Jānis Blaus

23/12 2017

0.1.x-dev

0.1.9999999.9999999-dev

  Sources   Download

The Requires

  • php >=5.5

 

by Jānis Blaus

23/12 2017

v0.2.4

0.2.4.0

  Sources   Download

The Requires

  • php >=5.5

 

by Jānis Blaus

22/12 2017

v0.2.3

0.2.3.0

  Sources   Download

The Requires

  • php >=5.5

 

by Jānis Blaus

11/12 2017

v0.2.2

0.2.2.0

  Sources   Download

The Requires

 

by Jānis Blaus

11/12 2017

v0.2.1

0.2.1.0

  Sources   Download

The Requires

 

by Jānis Blaus

11/12 2017

v0.2.0

0.2.0.0

  Sources   Download

The Requires

  • php >=5.5

 

by Jānis Blaus

10/11 2017

v0.1.9

0.1.9.0

  Sources   Download

The Requires

  • php >=5.5

 

by Jānis Blaus

07/11 2017

v0.1.8

0.1.8.0

  Sources   Download

The Requires

  • php >=5.5

 

by Jānis Blaus

07/11 2017

v0.1.7

0.1.7.0

  Sources   Download

The Requires

  • php >=5.5

 

by Jānis Blaus

07/11 2017

v0.1.5

0.1.5.0

  Sources   Download

The Requires

  • php >=5.5

 

by Jānis Blaus

07/11 2017

v0.1.6

0.1.6.0

  Sources   Download

The Requires

  • php >=5.5

 

by Jānis Blaus

07/11 2017

v0.1.4

0.1.4.0

  Sources   Download

The Requires

  • php >=5.5

 

by Jānis Blaus

06/11 2017

v0.1.2

0.1.2.0

  Sources   Download

The Requires

  • php >=5.5

 

by Jānis Blaus

24/10 2017

v0.0.1

0.0.1.0

  Sources   Download

The Requires

  • php >=5.5

 

by Jānis Blaus

24/10 2017

v0.1.1

0.1.1.0

  Sources   Download

The Requires

  • php >=5.5

 

by Jānis Blaus

24/10 2017

v0.1.3

0.1.3.0

  Sources   Download

The Requires

  • php >=5.5

 

by Jānis Blaus