Skip to content

Instantly share code, notes, and snippets.

@Atmden
Last active April 16, 2019 17:27
Show Gist options
  • Save Atmden/d1354bd934bab42f9bc86c692757d651 to your computer and use it in GitHub Desktop.
Save Atmden/d1354bd934bab42f9bc86c692757d651 to your computer and use it in GitHub Desktop.
Articles.php
<?php
namespace App\Admin\Sections;
use SleepingOwl\Admin\Contracts\Display\DisplayInterface;
use SleepingOwl\Admin\Contracts\Form\FormInterface;
use SleepingOwl\Admin\Contracts\Initializable;
use SleepingOwl\Admin\Section;
use AdminColumn;
use AdminDisplay;
use AdminForm;
use AdminFormElement;
use AdminColumnEditable;
use AdminSection;
use SleepingOwl\Admin\Form\Buttons\SaveAndClose;
use SleepingOwl\Admin\Form\Buttons\Cancel;
use App\Models\Tag;
use App\Models\Comment;
use SleepingOwl\Admin\Form\FormElements;
/**
* Class Articles
*
* @property \App\Models\Article $model
*
* @see http://sleepingowladmin.ru/docs/model_configuration_section
*/
class Articles extends Section implements Initializable
{
/**
* @see http://sleepingowladmin.ru/docs/model_configuration#ограничение-прав-доступа
*
* @var bool
*/
protected $checkAccess = false;
/**
* @var string
*/
protected $title = 'Статьи';
protected $icon = 'fa fa-file-text-o';
/**
* @var string
*/
protected $alias;
/**
* @return DisplayInterface
*/
public function onDisplay()
{
$display = AdminDisplay::table()
->setHtmlAttribute('class', 'table-primary')
->setColumns([
AdminColumn::link('title','Наименование'),
AdminColumnEditable::checkbox('online')->setLabel('Показывать на сайте'),
AdminColumn::order('order')->setLabel('Сортировка'),
AdminColumn::datetime('enable_at')->setLabel('Дата публикации')->setHtmlAttribute('class', 'text-muted'),
AdminColumn::datetime('updated_at')->setLabel('Последние изменения'),
])->paginate(20);
$display->setApply(function ($query) {
$query->orderBy('order');
});
return $display;
}
/**
* @param int $id
*
* @return FormInterface
*/
public function onEdit($id)
{
$comments = AdminSection::getModel(Comment::class)->fireDisplay();
$comments->setApply(function ($query) use ($id) {
$query->where('article_id', $id);
});
$form = AdminForm::panel()->addBody(
AdminFormElement::columns([
[
AdminFormElement::checkbox('online', 'Показывать на сайте'),
AdminFormElement::date('enable_at','Дата публикации'),
AdminFormElement::text('title', 'Наименование')->required(),
AdminFormElement::text('breadcrumbs', 'Хлебные крошки')->required(),
AdminFormElement::wysiwyg('prev_content', 'Краткое описание'),
AdminFormElement::multiselect('tags','Тэги')
->setModelForOptions(Tag::class)
->setDisplay('title'),
],
[
AdminFormElement::image('image', 'Большое изображение')->setHelpText('Необходимый размер: 730х358')->required(),
AdminFormElement::image('prev_image', 'Превью')->setHelpText('Необходимый размер: 350x172')->required(),
],
]),
AdminFormElement::wysiwyg('content', 'Содержание статьи')
);
$form->getButtons()->setButtons([
'save' => new SaveAndClose(),
'cancel' => (new Cancel())->setText('Отмена'),
]);
$tabs = AdminDisplay::tabbed();
$tabs->appendTab($form, 'Статья');
$tabs->appendTab($comments, 'Комментарии');
return $tabs;
}
/**
* @return FormInterface
*/
public function onCreate()
{
return $this->onEdit(null);
}
/**
* @return void
*/
public function onDelete($id)
{
// remove if unused
}
/**
* @return void
*/
public function onRestore($id)
{
// remove if unused
}
/**
* Initialize class.
*/
public function initialize()
{
$this->addToNavigation(14);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment