PHP code example of yii2tech / content
1. Go to this page and download the library: Download yii2tech/content library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
yii2tech / content example snippets
return [
'components' => [
'pageContentManager' => [
'class' => 'yii2tech\content\Manager',
'sourceStorage' => [
'class' => 'yii2tech\content\PhpStorage',
'filePath' => '@app/data/pages',
],
'overrideStorage' => [
'class' => 'yii2tech\content\DbStorage',
'table' => '{{%Page}}',
'contentAttributes' => [
'title',
'body',
],
],
],
],
// ...
];
// file '@app/data/pages/about.php'
return [
'title' => 'About',
'body' => 'About page content',
];
class m??????_??????_createPage extends yii\db\Migration
{
public function safeUp()
{
$tableName = 'Page';
$columns = [
'id' => $this->string(),
'title' => $this->string(),
'body' => $this->text(),
'PRIMARY KEY([[id]])',
];
$this->createTable($tableName, $columns);
}
public function safeDown()
{
$this->dropTable('Page');
}
}
// file '@app/views/site/about.php'
use yii\bootstrap\Html;
/* @var $this yii\web\View */
/* @var $contentManager yii2tech\content\Manager */
$contentManager = Yii::$app->get('pageContentManager');
$contentItem = $contentManager->get('about');
$this->title = $contentItem->render('title');
// file '@app/data/pages/about.php'
return [
'title' => 'About',
'body' => <<<HTML
<h1>About page content</h1>
<img src="{{appBaseUrl}}/images/about.jpg">
<a href="{{appBaseUrl}}">Home page</a>
...
HTML
];
// file '@app/views/site/about.php'
use yii\bootstrap\Html;
/* @var $this yii\web\View */
/* @var $contentManager yii2tech\content\Manager */
$contentManager = Yii::$app->get('pageContentManager');
$contentItem = $contentManager->get('about');
$this->title = $contentItem->render('title');
return [
'components' => [
'pageContentManager' => [
'class' => 'yii2tech\content\Manager',
'defaultRenderData' => function () {
return [
'appName' => Yii::$app->name,
'appBaseUrl' => Yii::$app->request->baseUrl,
];
},
// ...
],
],
// ...
];
/* @var $contentManager yii2tech\content\Manager */
$contentManager = Yii::$app->get('pageContentManager');
$contentManager->save('about', [
'title' => 'Overridden Title',
'body' => 'Overridden Body',
]);
echo $contentManager->get('about')->render('title'); // outputs 'Overridden Title'
/* @var $contentManager yii2tech\content\Manager */
$contentManager = Yii::$app->get('pageContentManager');
$contentManager->reset('about');
echo $contentManager->get('about')->render('title'); // outputs 'About'
/* @var $contentManager yii2tech\content\Manager */
$contentManager = Yii::$app->get('pageContentManager');
$contentItem = $contentManager->get('about');
$contentItem->title = 'Overridden Title';
$contentItem->body = 'Overridden Body';
$contentItem->save(); // saves override
$contentItem->reset(); // restores origin (source)
/* @var $contentManager yii2tech\content\Manager */
$contentManager = Yii::$app->get('pageContentManager');
$contentManager->save('newPage', [
'title' => 'New page',
'body' => 'New page body',
]);
echo $contentManager->get('newPage')->render('title'); // outputs 'New page'
$contentManager->reset('newPage');
$contentManager->get('newPage'); // throws `\yii2tech\content\ItemNotFoundException` exception
use yii2tech\content\Item;
/* @var $contentManager yii2tech\content\Manager */
$contentManager = Yii::$app->get('pageContentManager');
$contentItem = new Item([
'manager' => $contentManager,
]);
$contentItem->id = 'newPage';
$contentItem->setContents([
'title' => 'New page',
'body' => 'New page body',
]);
$contentItem->save();
use yii\web\Controller;
use yii\web\NotFoundHttpException;
use yii2tech\content\ItemNotFoundException;
use Yii;
class PageController extends Controller
{
/**
* Updates particular content item, creating/updating an override.
*/
public function actionUpdate($id)
{
$model = $this->findModel($id);
if ($model->load(Yii::$app->request->post())) {
if ($model->save()) {
return $this->redirect(['index']);
}
}
return $this->render('update', [
'model' => $model,
]);
}
/**
* Restores default values for particular content item, removing an override.
*/
public function actionDefault($id)
{
$model = $this->findModel($id);
$model->reset();
return $this->redirect(['index']);
}
/**
* @param string $id
* @return \yii2tech\content\Item
*/
protected function findModel($id)
{
/* @var $contentManager \yii2tech\content\Manager */
$contentManager = Yii::$app->get('pageContentManager');
try {
$model = $contentManager->get($id);
} catch (ItemNotFoundException $e) {
throw new NotFoundHttpException('Requested page does not exist.');
}
return $model;
}
// ...
}
use yii\widgets\ActiveForm;
use yii\helpers\Html;
/* @var $this yii\web\View */
/* @var $model yii2tech\content\Item */
$this->title = Yii::t('admin', 'Update Page: ') . $model->id;
return [
'components' => [
'pageContentManager' => [
'class' => 'yii2tech\content\Manager',
'itemConfig' => [
'class' => 'yii2tech\content\Item',
'rules' => [
[['title', 'body'], ' ];
},
'hints' => function () {
return [
'title' => Yii::t('page', 'Page title...'),
'body' => Yii::t('page', 'Page body content...'),
];
},
],
// ...
],
],
// ...
];
use yii\web\Controller;
use Yii;
class PageController extends Controller
{
/**
* Displays list of all available content items.
*/
public function actionIndex()
{
/* @var $contentManager \yii2tech\content\Manager */
$contentManager = Yii::$app->get('pageContentManager');
$dataProvider = new ArrayDataProvider([
'allModels' => $contentManager->getAll(),
'pagination' => false,
]);
return $this->render('index', [
'dataProvider' => $dataProvider,
]);
}
// ...
}
use yii\grid\ActionColumn;
use yii\grid\GridView;
/* @var $this yii\web\View */
/* @var $dataProvider yii\data\ArrayDataProvider */
// file '@app/data/pages/about.php'
return [
'title' => 'About {{appName}}',
'body' => 'About page content',
'pageUrl' => ['/site/about'],
'placeholderHints' => [
'{{appName}}' => 'Application name'
],
];
return [
'components' => [
'pageContentManager' => [
'class' => 'yii2tech\content\Manager',
'metaDataContentParts' => [
'pageUrl',
'placeholderHints',
],
// ...
],
],
// ...
];
/* @var $contentManager yii2tech\content\Manager */
$contentManager = Yii::$app->get('pageContentManager');
$contentItem = $contentManager->get('about');
var_dump($contentItem->has('pageUrl')); // outputs `false`
$metaData = $contentManager->getMetaData('about');
var_dump($metaData['pageUrl']);
$metaData = $contentItem->getMetaData();
var_dump($metaData['pageUrl']);
return [
'components' => [
'mailContentManager' => [
'class' => 'yii2tech\content\Manager',
'sourceStorage' => [
'class' => 'yii2tech\content\PhpStorage',
'filePath' => '@app/data/mail',
],
'overrideStorage' => [
'class' => 'yii2tech\content\DbStorage',
'table' => '{{%MailTemplate}}',
'contentAttributes' => [
'subject',
'body',
],
],
],
],
// ...
];
/* @var $contentManager yii2tech\content\Manager */
$contentManager = Yii::$app->get('mailContentManager');
$contentItem = $contentManager->get('contact');
Yii::$app->mailer->compose()
->setTo($admin->email)
->setFrom([Yii::$app->params['appEmail'] => Yii::$app->name])
->setSubject($contentItem->render('subject', ['appName' => Yii::$app->name, 'form' => $this]))
->setHtmlBody($contentItem->render('body', ['appName' => Yii::$app->name, 'form' => $this]))
->send();
return [
'components' => [
'mailContentManager' => [
// ...
],
'mailer' => [
'class' => 'yii\swiftmailer\Mailer',
'as content' => [
'class' => 'yii2tech\content\mail\MailerContentBehavior',
'contentManager' => 'mailContentManager',
'messagePopulationMap' => [
'subject' => 'setSubject()',
'body' => 'setHtmlBody()',
],
],
],
],
// ...
];
Yii::$app->mailer->composeFromContent('contact', ['appName' => Yii::$app->name, 'form' => $this])
->setTo($admin->email)
->setFrom([Yii::$app->params['appEmail'] => Yii::$app->name])
->send();
/* @var $contentManager yii2tech\content\Manager */
$contentManager = Yii::$app->get('pageContentManager');
$contentItem = $contentManager->get(Yii::$app->language . '/about');
data/
pages/
en/
about.php
how-it-works.php
ru/
about.php
how-it-works.php
mail/
en/
contact.php
reset-password.php
ru/
contact.php
reset-password.php