erenmustafaozdal/laravel-page-module

laravel 5.1 page management module package

v0.1.3 2016-08-24 12:40 UTC

This package is not auto-updated.

Last update: 2024-11-18 07:56:09 UTC


README

Laravel 5.1 Source License

Laravel Page Module, Laravel 5.1 projelerinde sayfa yönetimi işlemlerini kapsayan bir modül paketidir. Bu paket kullanıcı arayüzü (views) hariç, arka plandaki bütün işlemleri barındırmaktadır. İstersen görünümleri kapsayan Laravel Modules Core paketini kullanarak, modüle tam kapsamıyla sahip olabilirsin.

  1. Kurulum
    1. Dosyaların Yayınlanması
    2. Migration
  2. Kullanım
    1. Ayar Dosyası
      1. Genel Ayarlar
      2. URL Ayarları
      3. Controller Ayarları
      4. Rota Açıp/Kapatma Ayarları
      5. Görünüm Ayarları
    2. Görünüm Tasarlama
      1. Model Kullanımı
        1. Page Category
        2. Page
      2. Rotalar
        1. Sayfa Kategori Rotaları
        2. Kategoriye Ait Sayfa Rotaları
        3. Sayfa Rotaları
      3. Form Alanları
        1. Sayfa Kategori Formları
        2. Kategoriye Ait Sayfa Formları
        3. Sayfa Formları
    3. Onaylamalar
    4. Olaylar
      1. Sayfa Kategori Olayları
      2. Sayfa Olayları
  3. Lisans

Kurulum

Composer ile yüklemek için aşağıdaki kodu kullanabilirsin.

composer require erenmustafaozdal/laravel-page-module

Ya da composer.json dosyana, aşağıdaki gibi ekleme yapıp, paketleri güncelleyebilirsin.

{
    "require": {
        "erenmustafaozdal/laravel-page-module": "~0.1"
    }
}
$ composer update

Bu işlem bittikten sonra, service provider'i projenin config/app.php dosyasına eklemelisin.

ErenMustafaOzdal\LaravelPageModule\LaravelPageModuleServiceProvider::class,

❗ Eğer Laravel Modules Core paketini kullanacaksan, o paketin service provider dosyasını üstte tanımlamalısın.

Dosyaların Yayınlanması

Laravel Page Module paketinin dosyalarını aşağıdaki kodla yayınlamalısın.

php artisan vendor:publish --provider="ErenMustafaOzdal\LaravelPageModule\LaravelPageModuleServiceProvider"

Migration

Dosyaları yayınladıktan sonra migration işlemi yapmalısın.

php artisan migrate

❗ Paket editör aracılığıyla veri tabanına kayıt yapmaktadır. Tahmin edebileceğin gibi Laravel Blade şablonunda {{ }} ile html etiketler ekranda metin olarak işlenecektir. Laravel'in {!! !!} şeklindeki kullanımı ise; güvenilir olmayan bir kişinin veri kaydetmesi sonucu XSS açığı oluşturabilir. Bunun önüne geçmek için Laravel Page Module mewebstudio/Purifier paketini kullanıyor. Sıradaki işlem olarak Purifier paketine yazma izni vermen gerekiyor.

Önce bu paketin dosyalarını yayınlayalım

php artisan vendor:publish --provider="Mews\Purifier\PurifierServiceProvider"

Daha sonra da izni verelim.

sudo chmod 777 vendor/ezyang/htmlpurifier/library/HTMLPurifier/DefinitionCache/Serializer

Son olarak App\PageCategory ve App\Page modellerini uygun bir şekilde tanımlamalısın. Bunun için App\PageCategory modelini ErenMustafaOzdal\LaravelPageModule\PageCategory modelinden, App\Page modelini ErenMustafaOzdal\LaravelPageModule\Page modelinden genişletmelisin.

namespace App;

use ErenMustafaOzdal\LaravelPageModule\PageCategory as EMOPageCategory;

class PageCategory extends EMOPageCategory
{
    //
}
namespace App;

use ErenMustafaOzdal\LaravelPageModule\Page as EMOPage;

class Page extends EMOPage
{
    //
}

Kullanım

Kurulum tamamlandığında; Laravel Modules Core paketini de dahil ettiysen, tasarım dahil olarak kullanıma hazır olacaktır.

❗ metinler yanlış görünüyorsa, Laravel Modules Core paketinin İngilizce dil dosyaları hazır olmadığı içindir. Bu sebeple projenin config/app.php dosyasında 'locale' => 'tr' tanımlaması yapmalısın.

Ayar Dosyası

Genel Ayarlar

Paketin içinde kullanılan genel ayarlar. Ayar dosyası içinde kök alanda bulunan ayarlar.

URL Ayarları

Tarayıcının adres çubuğunda görünecek adreslerin tanımlandığı ayarlar. Ayar dosyasının url alanında bulunan ayarlardır.

Örneğin: activate_route ayarı ile aktivasyon sayfası adresi account-activate şeklinde tanımlanmıştır. Bu şekilde adres çubuğunda şuna benzer bir görünüm olacaktır: www.siteadi.com/account-activate/{id}/{code}

Controller Ayarları

Bazı metotlarda değişiklik yapmak isteyebilirsin. Burada yapacağın tanımlamalarda kendi Controller sınıfını tanımlayıp, Laravel Page Module'ün ilgili controller'ından genişletirsen, istediğin metotların üzerine yazabilirsin. Ayar dosyasının controller alanında bulunan ayarlardır.

Rota Açıp/Kapatma Ayarları

Projeye göre bazı rotalar işe yaramayabilir. Bunların açık olmasını istemeyebilirsin. Aşağıdaki ayarları kullanarak istediğin rotaları açıp kapatabilirsin. Ayar dosyasının routes alanında bulunan ayarlardır. Bütün rotaların başlangıçta true değerine sahiptir ve açıktır.

| Ayar | Açıklama | |---|---|---| | admin.page_category | Sayfa Kategorisi yönetim paneli resource rotaları | | admin.page | Sayfa yönetim paneli resource rotaları | | admin.page_publish | Sayfa yayınlama yönetim paneli get rotası | | admin.page_notPublish | Sayfa yayından kaldırma yönetim paneli get rotası | | admin.category_pages | Kategoriye ait sayfaların yönetim paneli resource rotaları | | admin.category_pages_publish | Kategoriye ait sayfaların yayınlama yönetim paneli get rotası | | admin.category_pages_notPublish | Kategoriye ait sayfaların yayından kaldırma yönetim paneli get rotası | | api.page_category | Sayfa Kategorisi api resource rotaları | | api.page_category_models | Sayfa Kategorilerinin çekildiği api post rotası (Örneğin Laravel Modules Core paketinde Select2 içine kategoriler çekilirken kullanılıyor) | | api.page_category_group | Sayfa Kategorilerinin grup olarak işlem yapıldığı api post rotası | | api.page_category_detail | Sayfa Kategorilerinin detay bilgisinin Datatables formatında çekildiği api get rotası | | api.page_category_fastEdit | Sayfa Kategorisinin hızlı düzenleme amacıyla çekildiği api post rotası | | api.page | Sayfa api resource rotaları | | api.page_group | Sayfaların grup olarak işlem yapıldığı api post rotası | | api.page_detail | Sayfaların detay bilgisinin Datatables formatında çekildiği api get rotası | | api.page_fastEdit | Sayfanın hızlı düzenleme amacıyla çekildiği api post rotası | | api.page_publish | Sayfa yayınlama api get rotası | | api.page_notPublish | Sayfa yayından kaldırma api get rotası | | api.page_contentUpdate | Sayfa içeriğini güncelleme api post rotası | | api.category_pages_index | Kategoriye ait sayfaların çekildiği api get rotası |

Görünüm Ayarları

Paketin kullanacağı görünümlerin tanımlandığı ayarlardır. Ayar dosyasının views alanı altında bulunan ayarlardır. Buradaki değerler varsayılan olarak Laravel Modules Core paketinin görünümlerine tanımlıdır.

Görünüm Tasarlama

Paket Laravel Modules Core paketiyle beraber direkt kullanıma hazırdır. Ancak istersen kendine özel görünümlerde tasarlayabilirsin. Bu bölüm özel tasarımlar için bir rehberdir.

Model Kullanımı

Görünümler içinde PageCategory ve Page modellerinin özellik ve metot kullanımı hakkında bilgileri kapsamaktadır. Bu metotlar ve özellikler App\PageCategory ve App\Page içinde üzerine yazılarak değiştirilebilir.

Page Category

####### Genel Özellikler

  1. protected $table = 'page_categories'
  2. protected $fillable = ['name']

####### $page_category->pages Collection hasMany() metoduyla App\Page modeliyle ilişkiyi sağlar

####### $page_category->name_uc_first string Baş harfleri büyük formatta sayfa kategorisinin adını döndürür

####### $page_category->created_at string Sayfa kategorisinin kayıt tarihini ayar dosyasındaki tanıma göre döndürür

####### $page_category->created_at_for_humans string Sayfa kategorisinin kayıt tarihini okunaklı veri şeklinde döndürür. Örneğin: 1 hafta önce

####### $page_category->created_at_table array Sayfa kategorisinin kayıt tarihini display(last_login_for_humans) ve timestamp şeklinde tutulan bir dizi şeklinde döndürür. Datatable'da kullanılması amacıyla oluşturulmuştur

####### $page_category->updated_at string Sayfa kategorisinin güncellenme tarihini ayar dosyasındaki tanıma göre döndürür

####### $page_category->updated_at_for_humans string Sayfa kategorisinin güncellenme tarihini okunaklı veri şeklinde döndürür. Örneğin: 1 hafta önce

####### $page_category->updated_at_table array Sayfa kategorisinin güncellenme tarihini display(last_login_for_humans) ve timestamp şeklinde tutulan bir dizi şeklinde döndürür. Datatable'da kullanılması amacıyla oluşturulmuştur

Page

####### Genel Özellikler

  1. protected $table = 'pages'
  2. protected $fillable = ['category_id','title','slug','content','description','meta_title','meta_description','meta_keywords','is_publish']

####### $page->category App\PageCategory belongsTo() metoduyla App\PageCategory modeliyle ilişkiyi sağlar

####### $page->title_uc_first string Baş harfleri büyük formatta sayfa başlığı

####### $page->slug string Sayfa url formatındaki hali

####### $page->content string XSS saldırılarından temizlenmiş sayfa içeriği

####### $page->description string Sayfa açıklaması

####### $page->meta_title string Sayfa meta başlığı

####### $page->meta_description string Sayfa meta açıklaması

####### $page->meta_keywords string Sayfa meta anahtar kelimeleri

####### $page->read boolean Sayfa okunma sayısı (Geliştirilecek ön yüzde bu değer arttırılıp, gösterilebilir)

####### $page->is_publish boolean Sayfa yayında mı

####### $page->created_at string Sayfanın kayıt tarihini ayar dosyasındaki tanıma göre döndürür

####### $page->created_at_for_humans string Sayfanın kayıt tarihini okunaklı veri şeklinde döndürür. Örneğin: 1 hafta önce

####### $page->created_at_table array Sayfanın kayıt tarihini display(last_login_for_humans) ve timestamp şeklinde tutulan bir dizi şeklinde döndürür. Datatable'da kullanılması amacıyla oluşturulmuştur

####### $page->updated_at string Sayfanın güncellenme tarihini ayar dosyasındaki tanıma göre döndürür

####### $page->updated_at_for_humans string Sayfanın güncellenme tarihini okunaklı veri şeklinde döndürür. Örneğin: 1 hafta önce

####### $page->updated_at_table array Sayfanın güncellenme tarihini display(last_login_for_humans) ve timestamp şeklinde tutulan bir dizi şeklinde döndürür. Datatable'da kullanılması amacıyla oluşturulmuştur

Rotalar

Laravel Page Module paketi CRUD işlemleri için sahip olduğu rotaların dışında, ajax ile işlem yapabileceğin birçok rotaya da sahiptir. Görünümlerini tasarlarken bunları kullanabilirsin.

Rotalarda kullanılabilecek form elemanları bir sonraki bölümde anlatılacaktır.

Sayfa Kategori Rotaları

Başta sayfa kategorisi CRUD işlemleri olmak üzere, bir kısım ajax işlemini de kapsayan rotalar.

Kategoriye Ait Sayfa Rotaları

Belirli kategoriye ait sayfaların CRUD işlemleri olmak üzere, bir kısım ajax işlemini de kapsayan rotalar.

Sayfa Rotaları

Sayfaların CRUD işlemleri olmak üzere, bir kısım ajax işlemini de kapsayan rotalar.

Form Alanları

İşlemler sırasında görünümlerinde kullanacağın form elemanları veri tabanı tablolarındaki sütun isimleriyle aynı olmalıdır. Aşağıda her işlem için gereken eleman listesi verilmiştir.

❗ Aşağıda belirtilen form isimleri kullanılması zorunlu olup, sırası değişebilir.

lang/.../validation.php dosyanda bu form isimlerinin metin değerlerini belirtmeyi unutma! Ayrıca her dil için validation dosyası oluşturmalısın.

Sayfa Kategori Formları
  • store işlemi form elemanları
    • name

StoreRequest

public function rules()
{
    return [
      'name'          => 'required|max:255'
    ];
}
  • update işlemi form elemanları
    • name

UpdateRequest

public function rules()
{
    return [
      'name'          => 'required|max:255'
    ];
}
  • Api index filtreleme işlemi verileri

    • action=filter
    • id
    • name
    • created_at_from
    • created_at_to
  • Api store işlemi verileri, yukarıdaki store işlemi ile aynıdır.

  • Api update işlemi verileri, yukarıdaki update işlemi ile aynıdır.

  • Api group işlemi verileri

    • action=destroy
    • id (array şeklinde model id'leri)

Kategoriye Ait Sayfa Formları
  • store işlemi form elemanları
    • category_id (Belirli bir kategoriye ait sayfa olduğu için; görünüm içinde hidden elementte değer tutulur)
    • title
    • slug
    • description
    • is_publish
    • content
    • meta_title
    • meta_description
    • meta_keywords

StoreRequest

public function rules()
{
    return [
      'category_id'       => 'required|integer',
      'title'             => 'required|max:255',
      'slug'              => 'alpha_dash|max:255|unique:pages',
      'description'       => 'max:255',
      'meta_title'        => 'max:255',
      'meta_description'  => 'max:255',
      'meta_keywords'     => 'max:255',
    ];
}
  • update işlemi form elemanları
    • category_id (Belirli bir kategoriye ait sayfa olduğu için; görünüm içinde hidden elementte değer tutulur)
    • title
    • slug
    • description
    • is_publish
    • content
    • meta_title
    • meta_description
    • meta_keywords

UpdateRequest

public function rules()
{
    $id = is_null($this->segment(5)) ? $this->segment(3) : $this->segment(5);
    return [
      'category_id'       => 'required|integer',
      'title'             => 'required|max:255',
      'slug'              => 'alpha_dash|max:255|unique:pages,slug,'.$id,
      'description'       => 'max:255',
      'meta_title'        => 'max:255',
      'meta_description'  => 'max:255',
      'meta_keywords'     => 'max:255',
    ];
}
  • Api index filtreleme işlemi verileri

    • action=filter
    • id
    • slug
    • title
    • status
    • created_at_from
    • created_at_to
  • Api store işlemi verileri, yukarıdaki store işlemi ile aynıdır.

  • Api update işlemi verileri, yukarıdaki update işlemi ile aynıdır.

  • Api group işlemi verileri

    • action=publish|not_publish|destroy
    • id (array şeklinde model id'leri)

Sayfa Formları

Bütün alanlar yukarıdaki Kategoriye Ait Sayfa Formları bölümüyle aynıdır. Farklı olan yer sadece Api index filtreleme işlemidir.

  • Api index filtreleme işlemi verileri
    • action=filter
    • id
    • slug
    • title
    • category
    • status
    • created_at_from
    • created_at_to

Onaylamalar

Laravel Page Module paketi yapılan her form isteği için onaylama kurallarını belirlemiştir. Bu tür form istek onaylama kuralları için yapman gereken bir şey yoktur. Yukarıda Request sınıflarının rules metotlarında açıklamaları yapılmıştır.

Olaylar

Paket içindeki hemen hemen tüm işlemler belli bir olayı tetikler. Sen kendi listener dosyanda bu olayları dinleyebilir ve tetiklendiğinde istediğin işlemleri kolay bir şekilde yapabilirsin.

Sayfa Kategori Olayları

Sayfa Olayları

Lisans

MIT