init commit
This commit is contained in:
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
/vendor/
|
||||
/cache/
|
||||
/composer.lock
|
||||
/.vscode/*
|
||||
28
app/Bootstrap.php
Normal file
28
app/Bootstrap.php
Normal file
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
class Bootstrap extends Yaf_Bootstrap_Abstract {
|
||||
|
||||
public function _initLoad()
|
||||
{
|
||||
Yaf_Loader::import(APP_PATH . '/vendor/autoload.php');
|
||||
}
|
||||
|
||||
public function _initConfig(Yaf_Dispatcher $dispatcher) {
|
||||
// 把配置保存起来
|
||||
Yaf_Registry::set('config', Yaf_Application::app()->getConfig());
|
||||
|
||||
if (Yaf_Application::app()->environ() !== 'product') {
|
||||
error_reporting(E_ALL & ~ E_NOTICE);
|
||||
ini_set('display_errors', 1);
|
||||
}
|
||||
}
|
||||
|
||||
public function _initView(Yaf_Dispatcher $dispatcher) {
|
||||
// 禁用yaf自带的模板引擎
|
||||
Yaf_Dispatcher::getInstance()->disableView();
|
||||
|
||||
//设置smarty
|
||||
$smarty = new Smarty_Adapter(null , Yaf_Application::app()->getConfig()->smarty);
|
||||
return Yaf_Dispatcher::getInstance()->setView($smarty);
|
||||
}
|
||||
}
|
||||
16
app/controllers/Error.php
Normal file
16
app/controllers/Error.php
Normal file
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* ErrorController 错误处理
|
||||
*/
|
||||
class ErrorController extends Yaf_Controller_Abstract {
|
||||
|
||||
public function errorAction($exception) {
|
||||
$code = $exception->getCode();
|
||||
$errMsg = $exception->getMessage();
|
||||
|
||||
var_dump($errMsg);
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
17
app/controllers/Index.php
Normal file
17
app/controllers/Index.php
Normal file
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
class IndexController extends Yaf_Controller_Abstract {
|
||||
|
||||
protected function init() {
|
||||
echo "IndexController\n";
|
||||
}
|
||||
|
||||
/* action method may have arguments */
|
||||
function indexAction() {
|
||||
return false;
|
||||
}
|
||||
|
||||
function loginAction() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
8
app/controllers/Log.php
Normal file
8
app/controllers/Log.php
Normal file
@@ -0,0 +1,8 @@
|
||||
<?php
|
||||
|
||||
class LogController extends Yaf_Controller_Abstract {
|
||||
/* action method may have arguments */
|
||||
function indexAction() {
|
||||
|
||||
}
|
||||
}
|
||||
174
app/library/Smarty/Adapter.php
Normal file
174
app/library/Smarty/Adapter.php
Normal file
@@ -0,0 +1,174 @@
|
||||
<?php
|
||||
/**
|
||||
*
|
||||
* @Author: Carl
|
||||
* @Since: 2017-11-23 11:45
|
||||
* Created by PhpStorm.
|
||||
*/
|
||||
|
||||
class Smarty_Adapter implements Yaf_View_Interface
|
||||
{
|
||||
/**
|
||||
* Smarty object
|
||||
* @var Smarty
|
||||
*/
|
||||
public $_smarty;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param string $tmplPath
|
||||
* @param array $extraParams
|
||||
* @return void
|
||||
*/
|
||||
public function __construct($tmplPath = null, $extraParams = array()) {
|
||||
$this->_smarty = new Smarty;
|
||||
|
||||
if (null !== $tmplPath) {
|
||||
$this->setScriptPath($tmplPath);
|
||||
}
|
||||
foreach ($extraParams as $key => $value) {
|
||||
$this->_smarty->$key = $value;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the template engine object
|
||||
*
|
||||
* @return Smarty
|
||||
*/
|
||||
public function getEngine() {
|
||||
return $this->_smarty;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the path to the templates
|
||||
*
|
||||
* @param string $path The directory to set as the path.
|
||||
* @return void
|
||||
*/
|
||||
public function setScriptPath($path)
|
||||
{
|
||||
debug_print_backtrace();
|
||||
|
||||
if (is_readable($path)) {
|
||||
$this->_smarty->template_dir = $path;
|
||||
return;
|
||||
}
|
||||
throw new Exception("Invalid path `${path}` provided");
|
||||
}
|
||||
/**
|
||||
* Retrieve the current template directory
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getScriptPath($request = NULL)
|
||||
{
|
||||
return $this->_smarty->template_dir;
|
||||
}
|
||||
|
||||
/**
|
||||
* Alias for setScriptPath
|
||||
*
|
||||
* @param string $path
|
||||
* @param string $prefix Unused
|
||||
* @return void
|
||||
*/
|
||||
public function setBasePath($path, $prefix = 'Zend_View')
|
||||
{
|
||||
return $this->setScriptPath($path);
|
||||
}
|
||||
|
||||
/**
|
||||
* Alias for setScriptPath
|
||||
*
|
||||
* @param string $path
|
||||
* @param string $prefix Unused
|
||||
* @return void
|
||||
*/
|
||||
public function addBasePath($path, $prefix = 'Zend_View')
|
||||
{
|
||||
return $this->setScriptPath($path);
|
||||
}
|
||||
|
||||
/**
|
||||
* Assign a variable to the template
|
||||
*
|
||||
* @param string $key The variable name.
|
||||
* @param mixed $val The variable value.
|
||||
* @return void
|
||||
*/
|
||||
public function __set($key, $val)
|
||||
{
|
||||
$this->_smarty->assign($key, $val);
|
||||
}
|
||||
|
||||
/**
|
||||
* Allows testing with empty() and isset() to work
|
||||
*
|
||||
* @param string $key
|
||||
* @return boolean
|
||||
*/
|
||||
public function __isset($key)
|
||||
{
|
||||
return (null !== $this->_smarty->get_template_vars($key));
|
||||
}
|
||||
/**
|
||||
* Allows unset() on object properties to work
|
||||
*
|
||||
* @param string $key
|
||||
* @return void
|
||||
*/
|
||||
public function __unset($key)
|
||||
{
|
||||
$this->_smarty->clear_assign($key);
|
||||
}
|
||||
|
||||
/**
|
||||
* Assign variables to the template
|
||||
*
|
||||
* Allows setting a specific key to the specified value, OR passing
|
||||
* an array of key => value pairs to set en masse.
|
||||
*
|
||||
* @see __set()
|
||||
* @param string|array $spec The assignment strategy to use (key or
|
||||
* array of key => value pairs)
|
||||
* @param mixed $value (Optional) If assigning a named variable,
|
||||
* use this as the value.
|
||||
* @return void
|
||||
*/
|
||||
public function assign($spec, $value = null) {
|
||||
if (is_array($spec)) {
|
||||
$this->_smarty->assign($spec);
|
||||
return;
|
||||
}
|
||||
$this->_smarty->assign($spec, $value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear all assigned variables
|
||||
*
|
||||
* Clears all variables assigned to Zend_View either via
|
||||
* {@link assign()} or property overloading
|
||||
* ({@link __get()}/{@link __set()}).
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function clearVars() {
|
||||
$this->_smarty->clear_all_assign();
|
||||
}
|
||||
|
||||
/**
|
||||
* Processes a template and returns the output.
|
||||
*
|
||||
* @param string $name The template to process.
|
||||
* @return string The output.
|
||||
*/
|
||||
public function render($name, $value = NULL) {
|
||||
return $this->_smarty->fetch($name);
|
||||
}
|
||||
|
||||
public function display($name, $value = NULL) {
|
||||
echo $this->_smarty->fetch($name);
|
||||
}
|
||||
}
|
||||
10
app/modules/Admin/controllers/User.php
Normal file
10
app/modules/Admin/controllers/User.php
Normal file
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
|
||||
class UserController extends Yaf_Controller_Abstract {
|
||||
|
||||
function listAction() {
|
||||
echo json_encode(array(
|
||||
|
||||
));
|
||||
}
|
||||
}
|
||||
197
app/modules/Admin/views/index.tpl
Normal file
197
app/modules/Admin/views/index.tpl
Normal file
@@ -0,0 +1,197 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<title>仪表盘</title>
|
||||
<meta content="noarchive" name="robots">
|
||||
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
|
||||
<link href="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
|
||||
<link href="//cdnjs.cloudflare.com/ajax/libs/admin-lte/2.4.18/css/AdminLTE.min.css" rel="stylesheet">
|
||||
<link href="//cdnjs.cloudflare.com/ajax/libs/admin-lte/2.4.18/css/skins/_all-skins.min.css" rel="stylesheet">
|
||||
<!--[if lt IE 9]>
|
||||
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv.min.js"></script>
|
||||
<script src="//cdnjs.cloudflare.com/ajax/libs/respond.js/1.4.2/respond.min.js"></script>
|
||||
<![endif]-->
|
||||
</head>
|
||||
<body class="hold-transition skin-blue sidebar-mini">
|
||||
<div class="wrapper">
|
||||
<header class="main-header">
|
||||
<a href="#" class="logo">
|
||||
<span class="logo-mini"><b>后</b></span>
|
||||
<span class="logo-lg"><b>后台管理</b></span>
|
||||
</a>
|
||||
<nav class="navbar navbar-static-top">
|
||||
<a href="#" class="sidebar-toggle" data-toggle="push-menu">
|
||||
<span class="sr-only"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</a>
|
||||
<div class="navbar-custom-menu">
|
||||
<ul class="nav navbar-nav">
|
||||
<li class="dropdown user user-menu">
|
||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
|
||||
<img src="//cdnjs.cloudflare.com/ajax/libs/admin-lte/2.4.18/img/avatar.png" class="user-image" alt="用户头像">
|
||||
<span class="hidden-xs">dragonflylee@126.com</span>
|
||||
</a>
|
||||
<ul class="dropdown-menu">
|
||||
<li class="user-header">
|
||||
<img src="//cdnjs.cloudflare.com/ajax/libs/admin-lte/2.4.18/img/avatar.png" class="img-circle" alt="用户头像">
|
||||
<p>
|
||||
dragonflylee@126.com
|
||||
<small>超级管理员</small>
|
||||
<small>上次登录 2021-05-13 16:15:45</small>
|
||||
</p>
|
||||
</li>
|
||||
<li class="user-footer">
|
||||
<div class="pull-left">
|
||||
<a href="/profile" class="btn btn-default btn-flat">个人中心</a>
|
||||
</div>
|
||||
<div class="pull-right">
|
||||
<a href="/logout" class="btn btn-default btn-flat">注销</a>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
<aside class="main-sidebar">
|
||||
<section class="sidebar">
|
||||
<div class="user-panel">
|
||||
<div class="pull-left image">
|
||||
<img src="//cdnjs.cloudflare.com/ajax/libs/admin-lte/2.4.18/img/avatar.png" class="img-circle" alt="用户头像">
|
||||
</div>
|
||||
<div class="pull-left info">
|
||||
<P>超级管理员</P>
|
||||
<a href="#" title="dragonflylee@126.com"><i class="fa fa-circle text-success"></i> 在线</a>
|
||||
</div>
|
||||
</div>
|
||||
<form class="sidebar-form">
|
||||
<div class="input-group">
|
||||
<input type="text" name="q" class="form-control" placeholder="搜索..." value="">
|
||||
<span class="input-group-btn">
|
||||
<button type="submit" id="search-btn" class="btn btn-flat"><i class="fa fa-search"></i></button>
|
||||
</span>
|
||||
</div>
|
||||
</form>
|
||||
<ul class="sidebar-menu" data-widget="tree">
|
||||
<li class="active">
|
||||
<a href="/">
|
||||
<i class="fa fa-dashboard"></i>
|
||||
<span>仪表盘</span>
|
||||
</a>
|
||||
</li>
|
||||
<li class="treeview ">
|
||||
<a href="#">
|
||||
<i class="fa fa-gears"></i> <span>系统管理</span>
|
||||
<span class="pull-right-container">
|
||||
<i class="fa fa-angle-left pull-right"></i>
|
||||
</span>
|
||||
</a>
|
||||
<ul class="treeview-menu">
|
||||
<li>
|
||||
<a href="/log">
|
||||
<i class="fa fa-sticky-note-o"></i>
|
||||
<span>日志查看</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/user">
|
||||
<i class="fa fa-users"></i>
|
||||
<span>用户管理</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/article">
|
||||
<i class="fa fa-user-o"></i>
|
||||
<span>文章管理</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
</aside>
|
||||
<div class="content-wrapper">
|
||||
<section class="content-header">
|
||||
<h1>
|
||||
仪表盘
|
||||
<small></small>
|
||||
</h1>
|
||||
<ol class="breadcrumb">
|
||||
<li><a href="#"><i class="fa fa-dashboard"></i> 首页</a></li>
|
||||
<li class="active">仪表盘</li>
|
||||
</ol>
|
||||
</section>
|
||||
<section class="content">
|
||||
<div class="row">
|
||||
<div class="col-lg-3 col-xs-6">
|
||||
<div class="small-box bg-aqua">
|
||||
<div class="inner">
|
||||
<h3>150</h3>
|
||||
<p>新订单</p>
|
||||
</div>
|
||||
<div class="icon">
|
||||
<i class="ion ion-bag"></i>
|
||||
</div>
|
||||
<a href="#" class="small-box-footer">更多 <i class="fa fa-arrow-circle-right"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-3 col-xs-6">
|
||||
<div class="small-box bg-green">
|
||||
<div class="inner">
|
||||
<h3>53<sup style="font-size: 20px">%</sup></h3>
|
||||
<p>增长率</p>
|
||||
</div>
|
||||
<div class="icon">
|
||||
<i class="ion ion-stats-bars"></i>
|
||||
</div>
|
||||
<a href="#" class="small-box-footer">更多 <i class="fa fa-arrow-circle-right"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-3 col-xs-6">
|
||||
<div class="small-box bg-yellow">
|
||||
<div class="inner">
|
||||
<h3>44</h3>
|
||||
<p>用户注册</p>
|
||||
</div>
|
||||
<div class="icon">
|
||||
<i class="ion ion-person-add"></i>
|
||||
</div>
|
||||
<a href="#" class="small-box-footer">更多 <i class="fa fa-arrow-circle-right"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-3 col-xs-6">
|
||||
<div class="small-box bg-red">
|
||||
<div class="inner">
|
||||
<h3>65</h3>
|
||||
<p>访问量</p>
|
||||
</div>
|
||||
<div class="icon">
|
||||
<i class="ion ion-pie-graph"></i>
|
||||
</div>
|
||||
<a href="#" class="small-box-footer">更多 <i class="fa fa-arrow-circle-right"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<p>{% $ref %}</p>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
<footer class="main-footer">
|
||||
<div class="pull-right hidden-xs">
|
||||
Powered by <b>1.0.0</b>
|
||||
</div>
|
||||
<strong>版权所有 © 2020</strong>
|
||||
</footer>
|
||||
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
|
||||
<script src="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>
|
||||
<script src="//cdnjs.cloudflare.com/ajax/libs/admin-lte/2.4.18/js/adminlte.min.js"></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
17
app/modules/Admin/views/layout/header.html
Normal file
17
app/modules/Admin/views/layout/header.html
Normal file
@@ -0,0 +1,17 @@
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<title>管理</title>
|
||||
<meta content="noarchive" name="robots">
|
||||
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
|
||||
<link href="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
|
||||
<link href="//cdnjs.cloudflare.com/ajax/libs/bootstrap-switch/3.3.4/css/bootstrap3/bootstrap-switch.min.css" rel="stylesheet">
|
||||
<link href="//cdnjs.cloudflare.com/ajax/libs/iCheck/1.0.3/skins/square/blue.min.css" rel="stylesheet">
|
||||
<link href="//cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/css/select2.min.css" rel="stylesheet">
|
||||
<link href="//cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.9.0/css/bootstrap-datepicker3.min.css" rel="stylesheet">
|
||||
<link href="//cdnjs.cloudflare.com/ajax/libs/admin-lte/2.4.18/css/AdminLTE.min.css" rel="stylesheet">
|
||||
<link href="//cdnjs.cloudflare.com/ajax/libs/admin-lte/2.4.18/css/skins/_all-skins.min.css" rel="stylesheet">
|
||||
<!--[if lt IE 9]>"}}
|
||||
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv.min.js"></script>
|
||||
<script src="//cdnjs.cloudflare.com/ajax/libs/respond.js/1.4.2/respond.min.js"></script>
|
||||
{{html "<![endif]-->
|
||||
11
app/modules/Index/controllers/Index.php
Normal file
11
app/modules/Index/controllers/Index.php
Normal file
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
class IndexController extends Yaf_Controller_Abstract {
|
||||
|
||||
/* action method may have arguments */
|
||||
function indexAction() {
|
||||
echo json_encode(array(
|
||||
|
||||
));
|
||||
}
|
||||
}
|
||||
0
cache/.gitkeep
vendored
Executable file
0
cache/.gitkeep
vendored
Executable file
8
composer.json
Normal file
8
composer.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"name": "dragonflylee/yafcms",
|
||||
"description": "cms framework powerby yaf",
|
||||
"require": {
|
||||
"symfony/yaml": "^3.4",
|
||||
"smarty/smarty": "^3"
|
||||
}
|
||||
}
|
||||
17
conf/app.ini
Normal file
17
conf/app.ini
Normal file
@@ -0,0 +1,17 @@
|
||||
[common]
|
||||
application.directory = APP_PATH "/app"
|
||||
application.modules = "Admin"
|
||||
application.dispatcher.throwException = True
|
||||
application.dispatcher.catchException = True
|
||||
application.view.ext = "tpl"
|
||||
|
||||
[smarty]
|
||||
smarty.left_delimiter = "{% "
|
||||
smarty.right_delimiter = " %}"
|
||||
smarty.template_dir = APP_PATH "/view/"
|
||||
smarty.compile_dir = APP_PATH "/cache/compile"
|
||||
smarty.cache_dir = APP_PATH "/cache/"
|
||||
|
||||
[product : common : smarty]
|
||||
|
||||
[development : common : smarty]
|
||||
22
conf/nginx.conf
Normal file
22
conf/nginx.conf
Normal file
@@ -0,0 +1,22 @@
|
||||
server {
|
||||
listen 80;
|
||||
server_name yaf.lvh.me;
|
||||
|
||||
access_log /var/log/nginx/yafcms.access.log;
|
||||
error_log /var/log/nginx/yafcms.error.log;
|
||||
|
||||
root /var/www/yaf_cms/public;
|
||||
index index.php;
|
||||
|
||||
charset utf-8;
|
||||
|
||||
location ~ .*\.php(\/.*)*$ {
|
||||
include snippets/fastcgi-php.conf;
|
||||
# 设置监听端口
|
||||
fastcgi_pass unix:/run/php/php7.3-fpm.sock;
|
||||
}
|
||||
|
||||
if (!-e $request_filename) {
|
||||
rewrite ^/(.*) /index.php/$1 last;
|
||||
}
|
||||
}
|
||||
1
public/assets/css/ace.min.css
vendored
Normal file
1
public/assets/css/ace.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
5
public/assets/js/ace.min.js
vendored
Normal file
5
public/assets/js/ace.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
5
public/index.php
Normal file
5
public/index.php
Normal file
@@ -0,0 +1,5 @@
|
||||
<?php
|
||||
define('APP_PATH', dirname(__DIR__)); //应用路径
|
||||
|
||||
$app = new Yaf_Application(APP_PATH . '/conf/app.ini');
|
||||
$app->bootstrap()->run();
|
||||
Reference in New Issue
Block a user