#0 | Phalcon\Mvc\View\Engine\Volt->render(/home/congvieclamtn/app/themes/hotmagazine/views/desktop/partials/widget.volt, Array(23), false) |
#1 | Phalcon\Mvc\View->_engineRender(Array([.volt] => Object(Application\Mvc\View\Engine\Volt), [.phtml] => Object(Phalcon\Mvc\View\Engine\Php)), /home/congvieclamtn/app/themes/hotmagazine/views/desktop/partials/widget, false, false) |
#2 | Phalcon\Mvc\View->partial(widget, Array([widgets] => Array([0] => Array([key] => 7, [name] => widget_banner, [slug] => widget_banner-7, [detail] => Array())))) |
#3 | Phalcon\Mvc\View\Engine->partial(widget, Array([widgets] => Array([0] => Array([key] => 7, [name] => widget_banner, [slug] => widget_banner-7, [detail] => Array()))))
/home/congvieclamtn/data/cache/volt/%%home%%congvieclamtn%%app%%themes%%hotmagazine%%views%%desktop%%post%%index%%detail.volt.php (290) <!DOCTYPE html>
<html lang="vi">
<head>
<!-- Basic -->
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<META NAME="ROBOTS" CONTENT="INDEX, FOLLOW">
<title><?= $this->escaper->escapeHtml($this->helper->title()->get()) ?></title>
<?= $this->helper->meta()->get('description') ?>
<?= $this->helper->meta()->get('keywords') ?>
<?= $this->helper->meta()->get('seo-manager') ?>
<?= $this->helper->meta()->getFb('og:site_name') ?>
<?= $this->helper->meta()->getFb('og:title') ?>
<?= $this->helper->meta()->getFb('og:description') ?>
<?= $this->helper->meta()->getFb('og:url') ?>
<?= $this->helper->meta()->getFb('og:image') ?>
<!-- Favicon -->
<link href="<?= $this->url->path() ?>favicon.ico" rel="shortcut icon" type="image/vnd.microsoft.icon">
<link rel="canonical" href="<?= $base_url . $this->router->getRewriteUri() ?>">
<!-- Mobile Metas -->
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<!-- build:css css/main.css -->
<!-- Theme CSS -->
<link href='http://fonts.googleapis.com/css?family=Lato:300,400,700,900,400italic' rel='stylesheet' type='text/css'>
<link href="http://maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet">
<link rel="stylesheet" type="text/css" href="<?= $this->url->path() ?>themes/hotmagazine/css/bootstrap.min.css" media="screen">
<link rel="stylesheet" type="text/css" href="<?= $this->url->path() ?>themes/hotmagazine/css/jquery.bxslider.css" media="screen">
<link rel="stylesheet" type="text/css" href="<?= $this->url->path() ?>themes/hotmagazine/css/font-awesome.css" media="screen">
<link rel="stylesheet" type="text/css" href="<?= $this->url->path() ?>themes/hotmagazine/css/magnific-popup.css" media="screen">
<link rel="stylesheet" type="text/css" href="<?= $this->url->path() ?>themes/hotmagazine/css/owl.carousel.css" media="screen">
<link rel="stylesheet" type="text/css" href="<?= $this->url->path() ?>themes/hotmagazine/css/owl.theme.css" media="screen">
<link rel="stylesheet" type="text/css" href="<?= $this->url->path() ?>themes/hotmagazine/css/ticker-style.css"/>
<link rel="stylesheet" type="text/css" href="<?= $this->url->path() ?>themes/hotmagazine/css/style.css?v=<?php echo time(); ?>" media="screen">
<link rel="stylesheet" type="text/css" href="<?= $this->url->path() ?>themes/hotmagazine/css/style_desktop.css?v=<?php echo time(); ?>" media="screen">
<!-- endbuild -->
</head>
<body>
<div id="container">
<!-- Header -->
<?= $this->partial('main/header') ?>
<!-- Header END -->
<!-- Content -->
<section class="block-wrapper">
<div class="container">
<div class="row">
<div class="col-sm-8">
<!-- block content -->
<div class="block-content">
<!-- single-post box -->
<div class="single-post-box">
<div class="title-post">
<h1><?= $post->title ?> </h1>
<ul class="post-tags">
<li><i class="fa fa-clock-o"></i><?= $post->getPublish() ?></li>
</ul>
</div>
<p><b><?= $post->intro ?></b></p>
<div class="share-post-box">
<ul class="share-box">
<li><i class="fa fa-share-alt"></i><span>Share Post</span></li>
<li><a class="facebook" href="#" onclick="share_fb('<?= $domain . $this->router->getRewriteUri() ?>');return false;" rel="nofollow" share_url="<?= $this->router->getRewriteUri() ?>" target="_blank"><i class="fa fa-facebook"></i>Share on Facebook</a></li>
<li><a class="twitter" href="#" onclick="share_twitter('<?= $domain . $this->router->getRewriteUri() ?>');return false;" rel="nofollow" share_url="<?= $this->router->getRewriteUri() ?>" target="_blank"><i class="fa fa-twitter"></i><span>Share on Twitter</span></a></li>
<li><a class="google" href="#" onclick="share_gplus('<?= $domain . $this->router->getRewriteUri() ?>');return false;" rel="nofollow" share_url="<?= $this->router->getRewriteUri() ?>" target="_blank"><i class="fa fa-google-plus"></i><span></span></a></li>
<li><a class="linkedin" href="#" onclick="share_linkedin('<?= $domain . $this->router->getRewriteUri() ?>');return false;" rel="nofollow" share_url="<?= $this->router->getRewriteUri() ?>" target="_blank"><i class="fa fa-linkedin"></i><span></span></a></li>
</ul>
</div>
<div class="post-content">
<?= $this->shortcode->do_shortcode($post->getPostContent()->content) ?>
</div>
<?php if (!empty($post->getPostTag()->toArray())) { ?>
<div class="post-tags-box">
<ul class="tags-box">
<li><i class="fa fa-tags"></i><span>Tags:</span></li>
<?php foreach ($post->getPostTag() as $post_tag) { ?>
<li><a href="<?= $this->url->get(['for' => 'post_tag', 'slug' => $this->helper->getTagSlug($post_tag->tag_id)]) ?>"><?= $this->helper->getTagName($post_tag->tag_id) ?></a></li>
<?php } ?>
</ul>
</div>
<?php } ?>
<div class="share-post-box">
<ul class="share-box">
<li><i class="fa fa-share-alt"></i><span>Share Post</span></li>
<li><a class="facebook" href="#" onclick="share_fb('<?= $domain . $this->router->getRewriteUri() ?>');return false;" rel="nofollow" share_url="<?= $this->router->getRewriteUri() ?>" target="_blank"><i class="fa fa-facebook"></i>Share on Facebook</a></li>
<li><a class="twitter" href="#" onclick="share_twitter('<?= $domain . $this->router->getRewriteUri() ?>');return false;" rel="nofollow" share_url="<?= $this->router->getRewriteUri() ?>" target="_blank"><i class="fa fa-twitter"></i><span>Share on Twitter</span></a></li>
<li><a class="google" href="#" onclick="share_gplus('<?= $domain . $this->router->getRewriteUri() ?>');return false;" rel="nofollow" share_url="<?= $this->router->getRewriteUri() ?>" target="_blank"><i class="fa fa-google-plus"></i><span></span></a></li>
<li><a class="linkedin"href="#" onclick="share_linkedin('<?= $domain . $this->router->getRewriteUri() ?>');return false;" rel="nofollow" share_url="<?= $this->router->getRewriteUri() ?>" target="_blank"><i class="fa fa-linkedin"></i><span></span></a></li>
</ul>
</div>
<!-- -->
<div class="about-more-autor">
<ul class="nav nav-tabs">
<li class="active">
<a href="single-post.html#more-autor" data-toggle="tab">Tin khác của thành viên này</a>
</li>
</ul>
<div class="tab-content">
<div class="tab-pane active" id="more-autor">
<div class="more-autor-posts">
<?php if ($postHelper['author']['post_count'] > 0) { ?>
<?php foreach ($postHelper['author']['posts'] as $postAuthor) { ?>
<div class="news-post image-post3">
<img src="/<?= $postAuthor['image'] ?>" alt="<?= $postAuthor['title'] ?>">
<div class="hover-box">
<h2><a href="<?= $this->url->get(['for' => 'post_detail', 'slug' => $postAuthor['slug'], 'id' => $postAuthor['id']]) ?>"><?= $postAuthor['title'] ?></a></h2>
<ul class="post-tags">
<li><i class="fa fa-clock-o"></i><?= $postAuthor['created_at'] ?></li>
</ul>
</div>
</div>
<?php } ?>
<?php } ?>
</div>
</div>
</div>
</div>
<!-- carousel box -->
<div class="carousel-box owl-wrapper">
<div class="title-section">
<h1><span>Tin cùng chuyên mục</span></h1>
</div>
<div class="owl-carousel" data-num="3">
<?php if (!empty($postRelate)) { ?>
<?php foreach ($postRelate as $post_relate) { ?>
<div class="item news-post image-post3">
<img height="210" src="/<?= $post_relate['post']['image'] ?>" alt="<?= $post_relate['post']['title'] ?>">
<div class="hover-box">
<h2><a href="<?= $post_relate['post']['url'] ?>"><?= $post_relate['post']['title'] ?></a></h2>
<ul class="post-tags">
<li><i class="fa fa-clock-o"></i><?= $post_relate['post']['created_at'] ?></li>
</ul>
</div>
</div>
<?php } ?>
<?php } ?>
</div>
</div>
<!-- End carousel box -->
</div>
<!-- End single-post box -->
</div>
<!-- End block content -->
</div>
<div class="col-sm-4">
<!-- sidebar -->
<div class="sidebar">
<div class="widget tab-posts-widget">
<ul class="nav nav-tabs" id="myTab">
<li class="active">
<a href="index.html#option1" data-toggle="tab">Tiêu điểm</a>
</li>
<li>
<a href="index.html#option2" data-toggle="tab">Nổi bật</a>
</li>
<li>
<a href="index.html#option3" data-toggle="tab">Xem nhiều</a>
</li>
</ul>
<div class="tab-content">
<div class="tab-pane active" id="option1">
<ul class="list-posts">
<?php if ($tabFeaturePost) { ?>
<?php foreach ($tabFeaturePost as $post) { ?>
<li>
<a href="<?= $post['post']['url'] ?>"><img src="/<?= $post['post']['image'] ?>" alt="<?= $post['post']['title'] ?>"></a>
<div class="post-content">
<h2><a href="<?= $post['post']['url'] ?>"><?= $post['post']['title'] ?> </a></h2>
<ul class="post-tags">
<li><i class="fa fa-clock-o"></i><?= $post['post']['created_at'] ?></li>
</ul>
</div>
</li>
<?php } ?>
<?php } ?>
</ul>
</div>
<div class="tab-pane" id="option2">
<ul class="list-posts">
<?php if ($tabHotPost) { ?>
<?php foreach ($tabHotPost as $post) { ?>
<li>
<a href="<?= $post['post']['url'] ?>"><img src="/<?= $post['post']['image'] ?>" alt="<?= $post['post']['title'] ?>"></a>
<div class="post-content">
<h2><a href="<?= $post['post']['url'] ?>"><?= $post['post']['title'] ?> </a></h2>
<ul class="post-tags">
<li><i class="fa fa-clock-o"></i><?= $post['post']['created_at'] ?></li>
</ul>
</div>
</li>
<?php } ?>
<?php } ?>
</ul>
</div>
<div class="tab-pane" id="option3">
<ul class="list-posts">
<?php if ($tabMostView) { ?>
<?php foreach ($tabMostView as $post) { ?>
<li>
<a href="<?= $post['post']['url'] ?>"><img src="/<?= $post['post']['image'] ?>" alt="<?= $post['post']['title'] ?>"></a>
<div class="post-content">
<h2><a href="<?= $post['post']['url'] ?>"><?= $post['post']['title'] ?> </a></h2>
<ul class="post-tags">
<li><i class="fa fa-clock-o"></i><?= $post['post']['created_at'] ?></li>
</ul>
</div>
</li>
<?php } ?>
<?php } ?>
</ul>
</div>
</div>
</div>
<div class="widget post-widget">
<div class="title-section">
<h1><span>Video</span></h1>
</div>
<?php foreach ($videos as $video) { ?>
<div class="news-post video-post">
<img alt="" src="/<?= $video['post']['image'] ?>">
<a href="https://www.youtube.com/watch?v=LL59es7iy8Q" class="video-link"><i class="fa fa-play-circle-o"></i></a>
<div class="hover-box">
<h2><a href="<?= $video['post']['url'] ?>"><?= $video['post']['title'] ?> </a></h2>
<ul class="post-tags">
<li><i class="fa fa-clock-o"></i><?= $video['post']['created_at'] ?></li>
</ul>
</div>
</div>
<?php } ?>
</div>
<div class="widget subscribe-widget">
<form class="subscribe-form">
<h1>Đăng ký nhận thông tin</h1>
<input type="text" name="sumbscribe" id="subscribe" placeholder="Email"/>
<button id="submit-subscribe">
<i class="fa fa-arrow-circle-right"></i>
</button>
</form>
</div>
<div class="widget tags-widget">
<div class="title-section">
<h1><span>Tag Phổ Biến</span></h1>
</div>
<ul class="tag-list">
<?php if (!empty($topTags)) { ?>
<?php foreach ($topTags as $item) { ?>
<li><a href="<?= $this->url->get(['for' => 'post_tag', 'slug' => $item->slug]) ?>"><?= $item->name ?></a></li>
<?php } ?>
<?php } ?>
</ul>
</div>
<?= $this->partial('widget', ['widgets' => $sidebarPost]) ?>
</div>
<!-- End sidebar -->
</div>
</div>
</div>
</section>
<script type="text/javascript">
function share_fb(url) {
window.open('https://www.facebook.com/sharer/sharer.php?u='+url,'facebook-share-dialog',"width=600, height=600")
}
function share_gplus(url) {
window.open('https://plus.google.com/share?url='+url,'','menubar=no,toolbar=no,resizable=yes,scrollbars=yes,height=600,width=600')
}
function share_twitter(url) {
window.open('https://twitter.com/share?'+url,'', 'left=0,top=0,width=600,height=600,personalbar=0,toolbar=0,scrollbars=0,resizable=0')
}
function share_linkedin(url) {
window.open('https://www.linkedin.com/shareArticle?mini=true&url='+url,'', 'left=0,top=0,width=600,height=600,personalbar=0,toolbar=0,scrollbars=0,resizable=0')
}
</script>
<style type="text/css">
.video-container {
height: auto !important;
}
</style>
<!-- Content END -->
<!-- Footer -->
<?= $this->partial('main/footer') ?>
<!-- Footer END -->
</div>
<script type="text/javascript" src="<?= $this->url->path() ?>themes/hotmagazine/js/jquery.min.js"></script>
<script type="text/javascript" src="<?= $this->url->path() ?>themes/hotmagazine/js/jquery.migrate.js"></script>
<script type="text/javascript" src="<?= $this->url->path() ?>themes/hotmagazine/js/jquery.bxslider.min.js"></script>
<script type="text/javascript" src="<?= $this->url->path() ?>themes/hotmagazine/js/jquery.magnific-popup.min.js"></script>
<script type="text/javascript" src="<?= $this->url->path() ?>themes/hotmagazine/js/bootstrap.min.js"></script>
<script type="text/javascript" src="<?= $this->url->path() ?>themes/hotmagazine/js/jquery.ticker.js"></script>
<script type="text/javascript" src="<?= $this->url->path() ?>themes/hotmagazine/js/jquery.imagesloaded.min.js"></script>
<script type="text/javascript" src="<?= $this->url->path() ?>themes/hotmagazine/js/jquery.isotope.min.js"></script>
<script type="text/javascript" src="<?= $this->url->path() ?>themes/hotmagazine/js/owl.carousel.min.js"></script>
<script type="text/javascript" src="<?= $this->url->path() ?>themes/hotmagazine/js/retina-1.1.0.min.js"></script>
<script type="text/javascript" src="<?= $this->url->path() ?>themes/hotmagazine/js/plugins-scroll.js"></script>
<script type="text/javascript" src="<?= $this->url->path() ?>themes/hotmagazine/js/script.js?v=<?php echo time() ?>"></script>
<script type="text/javascript" src="<?= $this->url->path() ?>themes/hotmagazine/js/main.js?v=<?php echo time() ?>"></script>
<script>
$( document ).ready(function() {
$('.post-content img').on('click', function () {
var url = $(this).attr('src');
window.open('https://www.facebook.com/sharer/sharer.php?u='+url,'facebook-share-dialog',"width=600, height=600")
});
});
</script>
<!-- endbuild -->
</body>
</html> |
#4 | unknown |
#5 | Phalcon\Mvc\View\Engine\Volt->render(/home/congvieclamtn/app/themes/hotmagazine/views/desktop/Post/index/detail.volt, Array(22), true) |
#6 | Phalcon\Mvc\View->_engineRender(Array([.volt] => Object(Application\Mvc\View\Engine\Volt), [.phtml] => Object(Phalcon\Mvc\View\Engine\Php)), Post/index/detail, true, true, null) |
#7 | Phalcon\Mvc\View->render(index, detail, Array([slug] => tam-huyet-gui-dai-hoi-doan-dau-tu-nang-luc-so-ngay-tu-lua-tuoi-thieu-nien, [id] => 49141))
/home/congvieclamtn/app/Bootstrap.php (402) <?php
namespace PhalartCMS;
use Application\Cache\Manager as CacheManager;
use Cms\Model\Configuration as CmsConfiguration;
use \PhalartCMS\Plugin\CheckPoint as CheckPointPlugin;
use \PhalartCMS\Plugin\Localization as LocalizationPlugin;
use \PhalartCMS\Plugin\AdminLocalization as AdminLocalizationPlugin;
use \PhalartCMS\Plugin\Acl as AclPlugin;
use \PhalartCMS\Plugin\MobileDetect as MobileDetectPlugin;
use PhalartCMS\Plugin\Shortcode;
use \PhalartCMS\Plugin\Title as TitlePlugin;
/**
* @copyright Copyright (c) 2018 Phalart
* @author Nhan Phong <nhanphong@vinadesign.vn>
* User: nhanphong
* Date: 6/4/18
* Time: 10:51 AM
*/
if (APPLICATION_ENV == 'development') {
date_default_timezone_set('Asia/Bangkok');
ini_set('display_errors', true);
error_reporting(E_ALL);
}
define('ROOT_APP', __DIR__);
class Bootstrap
{
public function run()
{
$di = new \Phalcon\DI\FactoryDefault();
$application = include_once APPLICATION_PATH . '/config/environment/' . APPLICATION_ENV . '.php';
$config_default = [
'base_path' => (isset($application['base_path'])) ? $application['base_path'] : null,
'base_uri' => (isset($application['base_uri'])) ? $application['base_uri'] : null,
'database' => (isset($application['database'])) ? $application['database'] : null,
'cache' => (isset($application['cache'])) ? $application['cache'] : null,
'memcache' => (isset($application['memcache'])) ? $application['memcache'] : null,
'memcached' => (isset($application['memcached'])) ? $application['memcached'] : null,
'assets' => (isset($application['assets'])) ? $application['assets'] : null,
];
$config = new \Phalcon\Config($config_default);
// Database
$db = new \Phalcon\Db\Adapter\Pdo\Mysql([
"host" => $config->database->host,
"username" => $config->database->username,
"password" => $config->database->password,
"dbname" => $config->database->dbname,
"charset" => $config->database->charset,
]);
$di->set('db', $db);
// Config
$result = $db->fetchOne(
"SELECT * FROM `cms_configuration` WHERE `key` = 'THEME'"
);
$theme = $result['value'];
define('THEME', $theme);
define('THEME_PATH', __DIR__ . '/themes/' . $theme);
require_once LIBRARY_PATH . '/modules/Cms/ConfigApp.php';
$config2 = \Cms\ConfigApp::get();
$config->merge($config2);
$di->set('config', $config);
// Registry
$registry = new \Phalcon\Registry();
$di->set('registry', $registry);
// Loader
$loader = new \Phalcon\Loader();
$loader->registerNamespaces($config->loader->namespaces->toArray());
$loader->registerDirs([LIBRARY_PATH . "/plugins/"]);
$loader->registerFiles([APPLICATION_PATH . '/../vendor/autoload.php']);
$loader->register();
// Get Option setting
$di->set('options', new \PhalartCMS\Plugin\Options());
// Get Option setting
// View
$this->initView($di);
$this->initSimpleView($di);
// URL
$url = new \Phalcon\Mvc\Url();
$url->setBasePath($config->base_path);
$url->setBaseUri($config->base_path);
$di->set('url', $url);
// Cache
$this->initCache($di);
// CMS
$cmsModel = new CmsConfiguration();
$registry->cms = $cmsModel->getConfig(); // Отправляем в Registry
// Application
$application = new \Phalcon\Mvc\Application();
$application->registerModules($config->modules->toArray());
// Events Manager, Dispatcher
$this->initEventManager($di);
// Session
$session = new \Phalcon\Session\Adapter\Files();
$session->start();
$di->set('session', $session);
$acl = new \Application\Acl\DefaultAcl();
$di->set('acl', $acl);
// JS Assets
$this->initAssetsManager($di);
// Flash helper
$flash = new \Phalcon\Flash\Session([
'error' => 'alert alert-danger',
'success' => 'alert alert-success',
'notice' => 'alert alert-info',
'warning' => 'alert alert-warning',
]);
$flash->setAutoescape(false);
$di->set('flash', $flash);
$di->set('helper', new \Application\Mvc\Helper());
// Routing
$this->initRouting($application, $di);
$application->setDI($di);
$di->setShared('shortcode', new Shortcode($application));
// Main dispatching process
$response = $this->dispatch($di);
$response->send();
}
private function initRouting($application, $di)
{
$router = new \Application\Mvc\Router\DefaultRouter();
$router->setDi($di);
foreach ($application->getModules() as $module) {
$routesClassName = str_replace('Module', 'Routes', $module['className']);
if (class_exists($routesClassName)) {
$routesClass = new $routesClassName();
$router = $routesClass->init($router);
}
$initClassName = str_replace('Module', 'Init', $module['className']);
if (class_exists($initClassName)) {
new $initClassName();
}
}
$di->set('router', $router);
}
private function initAssetsManager($di)
{
$config = $di->get('config');
$assetsManager = new \Application\Assets\Manager();
$js_collection = $assetsManager->collection('js')
->setLocal(true)
->addFilter(new \Phalcon\Assets\Filters\Jsmin())
->setTargetPath(ROOT . '/assets/js.js')
->setTargetUri('assets/js.js')
->join(true);
if ($config->assets->js) {
foreach ($config->assets->js as $js) {
$js_collection->addJs(ROOT . '/' . $js);
}
}
// Admin JS Assets
$assetsManager->collection('modules-admin-js')
->setLocal(true)
->addFilter(new \Phalcon\Assets\Filters\Jsmin())
->setTargetPath(ROOT . '/assets/modules-admin.js')
->setTargetUri('assets/modules-admin.js')
->join(true);
// Admin LESS Assets
$assetsManager->collection('modules-admin-less')
->setLocal(true)
->addFilter(new \Application\Assets\Filter\Less())
->setTargetPath(ROOT . '/assets/modules-admin.less')
->setTargetUri('assets/modules-admin.less')
->join(true)
->addCss(APPLICATION_PATH . '/modules/Admin/assets/admin.less');
$di->set('assets', $assetsManager);
}
private function initEventManager($di)
{
$eventsManager = new \Phalcon\Events\Manager();
$dispatcher = new \Phalcon\Mvc\Dispatcher();
$eventsManager->attach("dispatch:beforeDispatchLoop", function ($event, $dispatcher) use ($di) {
new CheckPointPlugin($di->get('request'));
new LocalizationPlugin($dispatcher);
new AdminLocalizationPlugin($di->get('config'));
new AclPlugin($di->get('acl'), $dispatcher, $di->get('view'));
new MobileDetectPlugin($di->get('session'), $di->get('view'), $di->get('request'));
});
$eventsManager->attach("dispatch:afterDispatchLoop", function ($event, $dispatcher) use ($di) {
new \Seo\Plugin\SeoManager($dispatcher, $di->get('request'), $di->get('router'), $di->get('view'));
new TitlePlugin($di);
});
// Profiler
$registry = $di->get('registry');
if ($registry->cms['PROFILER']) {
$profiler = new \Phalcon\Db\Profiler();
$di->set('profiler', $profiler);
$eventsManager->attach('db', function ($event, $db) use ($profiler) {
if ($event->getType() == 'beforeQuery') {
$profiler->startProfile($db->getSQLStatement());
}
if ($event->getType() == 'afterQuery') {
$profiler->stopProfile();
}
});
}
$db = $di->get('db');
$db->setEventsManager($eventsManager);
$dispatcher->setEventsManager($eventsManager);
$di->set('dispatcher', $dispatcher);
}
private function initView($di)
{
$view = new \Phalcon\Mvc\View();
$theme = THEME;
define('MAIN_VIEW_PATH', ROOT_APP . "/themes/{$theme}/views/");
/*$view->setViewsDir(MAIN_VIEW_PATH);
$view->setPartialsDir(MAIN_VIEW_PATH . "/partials/");
$view->setRenderLevel(\Phalcon\Mvc\View::LEVEL_ACTION_VIEW);*/
// Volt
$volt = new \Application\Mvc\View\Engine\Volt($view, $di);
$volt->setOptions([
'compiledPath' => APPLICATION_PATH . '/../data/cache/volt/',
'compileAlways' => !(APPLICATION_ENV == 'development'),
]);
$volt->initCompiler();
$phtml = new \Phalcon\Mvc\View\Engine\Php($view, $di);
$viewEngines = [
".volt" => $volt,
".phtml" => $phtml,
];
$view->registerEngines($viewEngines);
$ajax = $di->get('request')->getQuery('_ajax');
if ($ajax) {
$view->setRenderLevel(\Phalcon\Mvc\View::LEVEL_LAYOUT);
}
$di->set('view', $view);
return $view;
}
private function initSimpleView($di)
{
$view = new \Phalcon\Mvc\View\Simple();
// Volt
$volt = new \Application\Mvc\View\Engine\Volt($view, $di);
$volt->setOptions(['compiledPath' => APPLICATION_PATH . '/../data/cache/volt/']);
$volt->initCompiler();
$phtml = new \Phalcon\Mvc\View\Engine\Php($view, $di);
$viewEngines = [
".volt" => $volt,
".phtml" => $phtml,
];
$view->registerEngines($viewEngines);
$di->set('simpleView', $view);
return $view;
}
private function initCache($di)
{
$config = $di->get('config');
$cacheFrontend = new \Phalcon\Cache\Frontend\Data([
"lifetime" => 60,
"prefix" => HOST_HASH,
]);
$cache = null;
switch ($config->cache) {
case 'file':
$cache = new \Phalcon\Cache\Backend\File($cacheFrontend, [
"cacheDir" => APPLICATION_PATH . "/../data/cache/backend/"
]);
break;
case 'memcache':
$cache = new \Phalcon\Cache\Backend\Memcache(
$cacheFrontend, [
"host" => $config->memcache->host,
"port" => $config->memcache->port,
]);
break;
case 'memcached':
$cache = new \Phalcon\Cache\Backend\Libmemcached(
$cacheFrontend, [
"host" => $config->memcached->host,
"port" => $config->memcached->port,
]);
break;
}
$di->set('cache', $cache, true);
$di->set('modelsCache', $cache, true);
\Application\Widget\Proxy::$cache = $cache; // Modules Widget System
$modelsMetadata = new \Phalcon\Mvc\Model\Metadata\Memory();
$di->set('modelsMetadata', $modelsMetadata);
$di->set('cacheManager', new CacheManager());
}
private function dispatch($di)
{
$router = $di['router'];
$router->handle();
$view = $di['view'];
$dispatcher = $di['dispatcher'];
$response = $di['response'];
$dispatcher->setModuleName($router->getModuleName());
$dispatcher->setControllerName($router->getControllerName());
$dispatcher->setActionName($router->getActionName());
$dispatcher->setParams($router->getParams());
$moduleName = \Application\Utils\ModuleName::camelize($router->getModuleName());
$ModuleClassName = $moduleName . '\Module';
if (class_exists($ModuleClassName)) {
$module = new $ModuleClassName;
$module->registerAutoloaders();
$module->registerServices($di);
}
$view->start();
$registry = $di['registry'];
if ($registry->cms['DEBUG_MODE']) {
$debug = new \Phalcon\Debug();
$debug->listen();
$dispatcher->dispatch();
} else {
try {
$dispatcher->dispatch();
} catch (\Phalcon\Exception $e) {
// Errors catching
$view->setViewsDir(__DIR__ . '/modules/Index/views/');
$view->setPartialsDir('');
$view->e = $e;
if ($e instanceof \Phalcon\Mvc\Dispatcher\Exception) {
$response->setStatusCode(404, 'Not Found');
$view->partial('error/error404');
} else {
$response->setStatusCode(503, 'Service Unavailable');
$view->partial('error/error503');
}
return $response;
}
}
$view->render(
$dispatcher->getControllerName(),
$dispatcher->getActionName(),
$dispatcher->getParams()
);
$view->finish();
// AJAX
$request = $di['request'];
$_ajax = $request->getQuery('_ajax');
if ($_ajax) {
$contents = $view->getContent();
$return = new \stdClass();
$return->html = $contents;
$return->title = $di->get('helper')->title()->get();
$return->success = true;
if ($view->bodyClass) {
$return->bodyClass = $view->bodyClass;
}
$headers = $response->getHeaders()->toArray();
if (isset($headers[404]) || isset($headers[503])) {
$return->success = false;
}
$response->setContentType('application/json', 'UTF-8');
$response->setContent(json_encode($return));
} else {
$response->setContent($view->getContent());
}
return $response;
}
}
|
#8 | PhalartCMS\Bootstrap->dispatch(null)
/home/congvieclamtn/app/Bootstrap.php (142) <?php
namespace PhalartCMS;
use Application\Cache\Manager as CacheManager;
use Cms\Model\Configuration as CmsConfiguration;
use \PhalartCMS\Plugin\CheckPoint as CheckPointPlugin;
use \PhalartCMS\Plugin\Localization as LocalizationPlugin;
use \PhalartCMS\Plugin\AdminLocalization as AdminLocalizationPlugin;
use \PhalartCMS\Plugin\Acl as AclPlugin;
use \PhalartCMS\Plugin\MobileDetect as MobileDetectPlugin;
use PhalartCMS\Plugin\Shortcode;
use \PhalartCMS\Plugin\Title as TitlePlugin;
/**
* @copyright Copyright (c) 2018 Phalart
* @author Nhan Phong <nhanphong@vinadesign.vn>
* User: nhanphong
* Date: 6/4/18
* Time: 10:51 AM
*/
if (APPLICATION_ENV == 'development') {
date_default_timezone_set('Asia/Bangkok');
ini_set('display_errors', true);
error_reporting(E_ALL);
}
define('ROOT_APP', __DIR__);
class Bootstrap
{
public function run()
{
$di = new \Phalcon\DI\FactoryDefault();
$application = include_once APPLICATION_PATH . '/config/environment/' . APPLICATION_ENV . '.php';
$config_default = [
'base_path' => (isset($application['base_path'])) ? $application['base_path'] : null,
'base_uri' => (isset($application['base_uri'])) ? $application['base_uri'] : null,
'database' => (isset($application['database'])) ? $application['database'] : null,
'cache' => (isset($application['cache'])) ? $application['cache'] : null,
'memcache' => (isset($application['memcache'])) ? $application['memcache'] : null,
'memcached' => (isset($application['memcached'])) ? $application['memcached'] : null,
'assets' => (isset($application['assets'])) ? $application['assets'] : null,
];
$config = new \Phalcon\Config($config_default);
// Database
$db = new \Phalcon\Db\Adapter\Pdo\Mysql([
"host" => $config->database->host,
"username" => $config->database->username,
"password" => $config->database->password,
"dbname" => $config->database->dbname,
"charset" => $config->database->charset,
]);
$di->set('db', $db);
// Config
$result = $db->fetchOne(
"SELECT * FROM `cms_configuration` WHERE `key` = 'THEME'"
);
$theme = $result['value'];
define('THEME', $theme);
define('THEME_PATH', __DIR__ . '/themes/' . $theme);
require_once LIBRARY_PATH . '/modules/Cms/ConfigApp.php';
$config2 = \Cms\ConfigApp::get();
$config->merge($config2);
$di->set('config', $config);
// Registry
$registry = new \Phalcon\Registry();
$di->set('registry', $registry);
// Loader
$loader = new \Phalcon\Loader();
$loader->registerNamespaces($config->loader->namespaces->toArray());
$loader->registerDirs([LIBRARY_PATH . "/plugins/"]);
$loader->registerFiles([APPLICATION_PATH . '/../vendor/autoload.php']);
$loader->register();
// Get Option setting
$di->set('options', new \PhalartCMS\Plugin\Options());
// Get Option setting
// View
$this->initView($di);
$this->initSimpleView($di);
// URL
$url = new \Phalcon\Mvc\Url();
$url->setBasePath($config->base_path);
$url->setBaseUri($config->base_path);
$di->set('url', $url);
// Cache
$this->initCache($di);
// CMS
$cmsModel = new CmsConfiguration();
$registry->cms = $cmsModel->getConfig(); // Отправляем в Registry
// Application
$application = new \Phalcon\Mvc\Application();
$application->registerModules($config->modules->toArray());
// Events Manager, Dispatcher
$this->initEventManager($di);
// Session
$session = new \Phalcon\Session\Adapter\Files();
$session->start();
$di->set('session', $session);
$acl = new \Application\Acl\DefaultAcl();
$di->set('acl', $acl);
// JS Assets
$this->initAssetsManager($di);
// Flash helper
$flash = new \Phalcon\Flash\Session([
'error' => 'alert alert-danger',
'success' => 'alert alert-success',
'notice' => 'alert alert-info',
'warning' => 'alert alert-warning',
]);
$flash->setAutoescape(false);
$di->set('flash', $flash);
$di->set('helper', new \Application\Mvc\Helper());
// Routing
$this->initRouting($application, $di);
$application->setDI($di);
$di->setShared('shortcode', new Shortcode($application));
// Main dispatching process
$response = $this->dispatch($di);
$response->send();
}
private function initRouting($application, $di)
{
$router = new \Application\Mvc\Router\DefaultRouter();
$router->setDi($di);
foreach ($application->getModules() as $module) {
$routesClassName = str_replace('Module', 'Routes', $module['className']);
if (class_exists($routesClassName)) {
$routesClass = new $routesClassName();
$router = $routesClass->init($router);
}
$initClassName = str_replace('Module', 'Init', $module['className']);
if (class_exists($initClassName)) {
new $initClassName();
}
}
$di->set('router', $router);
}
private function initAssetsManager($di)
{
$config = $di->get('config');
$assetsManager = new \Application\Assets\Manager();
$js_collection = $assetsManager->collection('js')
->setLocal(true)
->addFilter(new \Phalcon\Assets\Filters\Jsmin())
->setTargetPath(ROOT . '/assets/js.js')
->setTargetUri('assets/js.js')
->join(true);
if ($config->assets->js) {
foreach ($config->assets->js as $js) {
$js_collection->addJs(ROOT . '/' . $js);
}
}
// Admin JS Assets
$assetsManager->collection('modules-admin-js')
->setLocal(true)
->addFilter(new \Phalcon\Assets\Filters\Jsmin())
->setTargetPath(ROOT . '/assets/modules-admin.js')
->setTargetUri('assets/modules-admin.js')
->join(true);
// Admin LESS Assets
$assetsManager->collection('modules-admin-less')
->setLocal(true)
->addFilter(new \Application\Assets\Filter\Less())
->setTargetPath(ROOT . '/assets/modules-admin.less')
->setTargetUri('assets/modules-admin.less')
->join(true)
->addCss(APPLICATION_PATH . '/modules/Admin/assets/admin.less');
$di->set('assets', $assetsManager);
}
private function initEventManager($di)
{
$eventsManager = new \Phalcon\Events\Manager();
$dispatcher = new \Phalcon\Mvc\Dispatcher();
$eventsManager->attach("dispatch:beforeDispatchLoop", function ($event, $dispatcher) use ($di) {
new CheckPointPlugin($di->get('request'));
new LocalizationPlugin($dispatcher);
new AdminLocalizationPlugin($di->get('config'));
new AclPlugin($di->get('acl'), $dispatcher, $di->get('view'));
new MobileDetectPlugin($di->get('session'), $di->get('view'), $di->get('request'));
});
$eventsManager->attach("dispatch:afterDispatchLoop", function ($event, $dispatcher) use ($di) {
new \Seo\Plugin\SeoManager($dispatcher, $di->get('request'), $di->get('router'), $di->get('view'));
new TitlePlugin($di);
});
// Profiler
$registry = $di->get('registry');
if ($registry->cms['PROFILER']) {
$profiler = new \Phalcon\Db\Profiler();
$di->set('profiler', $profiler);
$eventsManager->attach('db', function ($event, $db) use ($profiler) {
if ($event->getType() == 'beforeQuery') {
$profiler->startProfile($db->getSQLStatement());
}
if ($event->getType() == 'afterQuery') {
$profiler->stopProfile();
}
});
}
$db = $di->get('db');
$db->setEventsManager($eventsManager);
$dispatcher->setEventsManager($eventsManager);
$di->set('dispatcher', $dispatcher);
}
private function initView($di)
{
$view = new \Phalcon\Mvc\View();
$theme = THEME;
define('MAIN_VIEW_PATH', ROOT_APP . "/themes/{$theme}/views/");
/*$view->setViewsDir(MAIN_VIEW_PATH);
$view->setPartialsDir(MAIN_VIEW_PATH . "/partials/");
$view->setRenderLevel(\Phalcon\Mvc\View::LEVEL_ACTION_VIEW);*/
// Volt
$volt = new \Application\Mvc\View\Engine\Volt($view, $di);
$volt->setOptions([
'compiledPath' => APPLICATION_PATH . '/../data/cache/volt/',
'compileAlways' => !(APPLICATION_ENV == 'development'),
]);
$volt->initCompiler();
$phtml = new \Phalcon\Mvc\View\Engine\Php($view, $di);
$viewEngines = [
".volt" => $volt,
".phtml" => $phtml,
];
$view->registerEngines($viewEngines);
$ajax = $di->get('request')->getQuery('_ajax');
if ($ajax) {
$view->setRenderLevel(\Phalcon\Mvc\View::LEVEL_LAYOUT);
}
$di->set('view', $view);
return $view;
}
private function initSimpleView($di)
{
$view = new \Phalcon\Mvc\View\Simple();
// Volt
$volt = new \Application\Mvc\View\Engine\Volt($view, $di);
$volt->setOptions(['compiledPath' => APPLICATION_PATH . '/../data/cache/volt/']);
$volt->initCompiler();
$phtml = new \Phalcon\Mvc\View\Engine\Php($view, $di);
$viewEngines = [
".volt" => $volt,
".phtml" => $phtml,
];
$view->registerEngines($viewEngines);
$di->set('simpleView', $view);
return $view;
}
private function initCache($di)
{
$config = $di->get('config');
$cacheFrontend = new \Phalcon\Cache\Frontend\Data([
"lifetime" => 60,
"prefix" => HOST_HASH,
]);
$cache = null;
switch ($config->cache) {
case 'file':
$cache = new \Phalcon\Cache\Backend\File($cacheFrontend, [
"cacheDir" => APPLICATION_PATH . "/../data/cache/backend/"
]);
break;
case 'memcache':
$cache = new \Phalcon\Cache\Backend\Memcache(
$cacheFrontend, [
"host" => $config->memcache->host,
"port" => $config->memcache->port,
]);
break;
case 'memcached':
$cache = new \Phalcon\Cache\Backend\Libmemcached(
$cacheFrontend, [
"host" => $config->memcached->host,
"port" => $config->memcached->port,
]);
break;
}
$di->set('cache', $cache, true);
$di->set('modelsCache', $cache, true);
\Application\Widget\Proxy::$cache = $cache; // Modules Widget System
$modelsMetadata = new \Phalcon\Mvc\Model\Metadata\Memory();
$di->set('modelsMetadata', $modelsMetadata);
$di->set('cacheManager', new CacheManager());
}
private function dispatch($di)
{
$router = $di['router'];
$router->handle();
$view = $di['view'];
$dispatcher = $di['dispatcher'];
$response = $di['response'];
$dispatcher->setModuleName($router->getModuleName());
$dispatcher->setControllerName($router->getControllerName());
$dispatcher->setActionName($router->getActionName());
$dispatcher->setParams($router->getParams());
$moduleName = \Application\Utils\ModuleName::camelize($router->getModuleName());
$ModuleClassName = $moduleName . '\Module';
if (class_exists($ModuleClassName)) {
$module = new $ModuleClassName;
$module->registerAutoloaders();
$module->registerServices($di);
}
$view->start();
$registry = $di['registry'];
if ($registry->cms['DEBUG_MODE']) {
$debug = new \Phalcon\Debug();
$debug->listen();
$dispatcher->dispatch();
} else {
try {
$dispatcher->dispatch();
} catch (\Phalcon\Exception $e) {
// Errors catching
$view->setViewsDir(__DIR__ . '/modules/Index/views/');
$view->setPartialsDir('');
$view->e = $e;
if ($e instanceof \Phalcon\Mvc\Dispatcher\Exception) {
$response->setStatusCode(404, 'Not Found');
$view->partial('error/error404');
} else {
$response->setStatusCode(503, 'Service Unavailable');
$view->partial('error/error503');
}
return $response;
}
}
$view->render(
$dispatcher->getControllerName(),
$dispatcher->getActionName(),
$dispatcher->getParams()
);
$view->finish();
// AJAX
$request = $di['request'];
$_ajax = $request->getQuery('_ajax');
if ($_ajax) {
$contents = $view->getContent();
$return = new \stdClass();
$return->html = $contents;
$return->title = $di->get('helper')->title()->get();
$return->success = true;
if ($view->bodyClass) {
$return->bodyClass = $view->bodyClass;
}
$headers = $response->getHeaders()->toArray();
if (isset($headers[404]) || isset($headers[503])) {
$return->success = false;
}
$response->setContentType('application/json', 'UTF-8');
$response->setContent(json_encode($return));
} else {
$response->setContent($view->getContent());
}
return $response;
}
}
|
#9 | PhalartCMS\Bootstrap->run()
/home/congvieclamtn/public/index.php (46) <?php
/**
* @copyright Copyright (c) 2018 Phalart
* @author Nhan Phong <nhanphong@vinadesign.vn>
* User: nhanphong
* Date: 6/4/18
* Time: 10:51 AM
*/
chdir(dirname(__DIR__));
define('ROOT', __DIR__);
define('HOST_HASH', substr(md5($_SERVER['HTTP_HOST']), 0, 12));
if (isset($_SERVER['APPLICATION_ENV'])) {
$applicationEnv = ($_SERVER['APPLICATION_ENV'] ? $_SERVER['APPLICATION_ENV'] : 'production');
} else {
$applicationEnv = (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production');
}
// if (!isset($_GET['dev'])) {
// echo "dang bao tri";
// die;
// }
define('APPLICATION_ENV', $applicationEnv);
define('BASE_URL', (isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]");
$actual_link = (isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$parts = parse_url($actual_link);
$prefix = substr($parts['path'], 1);
$part = explode('/', $prefix);
$admin = 'admin';
$theme = 'blog';
//define('THEME', $theme);
if ($part[0] != $admin) {
define('IS_ADMIN', false);
define('APPLICATION_PATH', __DIR__ . '/../app');
require_once APPLICATION_PATH . '/Bootstrap.php';
} else {
define('IS_ADMIN', true);
define('APPLICATION_PATH', __DIR__ . '/../admin');
define('ADMINISTRATOR_PATH', __DIR__ . '/../admin');
require_once ADMINISTRATOR_PATH . '/Bootstrap.php';
}
define('LIBRARY_PATH', __DIR__ . '/../library');
$bootstrap = new PhalartCMS\Bootstrap();
$bootstrap->run();
|