sy/bootstrap plugin for adding "Article" feature in your sy/project based application.
From your sy/project based application directory, run this command:
composer install-plugin article
NOTES
The install-plugin command will do all these following steps:
composer require sy/bootstrap-article
Use the database installation script: sql/install.sql
Copy template files into your project templates directory: protected/templates/Application/content
Copy the language folder lang/bootstrap-article
into your project language directory: protected/lang
Copy the scss file scss/_bootstrap-article.scss
into your project scss directory: protected/scss
Import it in your app.scss
file and rebuild the css file.
Create 2 methods in your Project\Application\Page
class (in protected/src/Application/Page.php
):
/**
* List of all articles page
*/
public function articlesAction() {
$components = [
'NAV' => new \Sy\Bootstrap\Component\Article\Nav('articles'),
'SEARCH_FORM' => new \Sy\Bootstrap\Component\Article\Search(),
'FEED' => new \Sy\Bootstrap\Component\Article\Feed(),
];
// Add article modal button
$service = \Project\Service\Container::getInstance();
if ($service->user->getCurrentUser()->hasPermission('article-create')) {
$components['ADD_FORM'] = new \Sy\Bootstrap\Component\Article\Add(['class' => 'mb-3']);
}
$this->setContentVars($components);
}
/**
* Article page
*/
public function articleAction() {
// Redirection if no article id provided
$id = $this->get('id');
if (is_null($id)) throw new \Sy\Bootstrap\Application\Page\NotFoundException();
// Detect language
$service = \Project\Service\Container::getInstance();
$lang = $service->lang->getLang();
// Retrieve article
$article = $service->article->retrieve(['id' => $id, 'lang' => $lang]);
if (empty($article)) {
$lang = LANG;
$article = $service->article->retrieve(['id' => $id, 'lang' => $lang]);
}
if (empty($article)) throw new \Sy\Bootstrap\Application\Page\NotFoundException();
// Article content
$content = new \Sy\Bootstrap\Component\Article\Content($id, $lang);
$this->setContentVars([
'ARTICLE_BREADCRUMB' => new \Sy\Bootstrap\Component\Article\Breadcrumb($id, $lang),
'ARTICLE_CONTENT' => $content,
'ARTICLE_AUTHOR' => new \Sy\Bootstrap\Component\Article\Author($article['user_id']),
'SIDE' => new \Sy\Bootstrap\Component\Article\Side($id, $article['category_id']),
'SHARE' => new \Sy\Bootstrap\Component\Share\Buttons(PROJECT_URL . Url::build('page', 'article', ['id' => $id])),
]);
}
In protected/src/Application.php
<?php
namespace Project;
use Sy\Bootstrap\Lib\Url;
class Application extends \Sy\Bootstrap\Application {
protected function initUrlConverter() {
Url\AliasManager::setAliasFile(__DIR__ . '/../conf/alias.php');
Url::addConverter(new Url\AliasConverter());
Url::addConverter(new Url\ArticleConverter()); // Add article converter
Url::addConverter(new Url\ControllerActionConverter());
}
}