godsdev/mycms

此包已被 废弃 并不再维护。作者建议使用 workofstan/mycms 包。

MyCMS

v0.3.15 2020-05-02 19:48 UTC

README

一个用于帮助开发交互式网站的简单框架。作为一个开发栈,您安装它并编写针对项目的特定类。

功能

  • 在展示中使用了 jQueryBootstrap(版本 4)
  • 使用 Latte 作为模板引擎
  • 使用 MySQL/MariaDB 作为网站数据库
  • 包含通用管理
  • 其他依赖库和技术 - Tracy, Nette\SmartObject, Psr\Log\LoggerInterface, GodsDev\Backyard\BackyardMysqli

安装

composer.json 中要求 MyCMS。

{
    ...
    "required": {
        "GodsDev/mycms": "^0.3.4" //or the latest version
        ...
    }
}

composer install 命令将库文件加载到 ./vendor/godsdev/mycms/。库的类在 ./vendor/godsdev/mycms/classes/ 中,大部分都以 My 为前缀。

要自定义项目,在 ./classes/ 目录中创建自己的类,继承 MyCMS 的类,并命名时不包含初始的 My

$MyCMS = new \GodsDev\MyCMS\MyCMS(
    array(
        // compulsory
        'logger' => $logger, // object \Psr\Log\LoggerInterface
        //optional
    )
);

//Finish with Latte initialization & Mark-up output
$MyCMS->renderLatte(DIR_TEMPLATE_CACHE, "\\GodsDev\\ProjectName\\Latte\\CustomFilters::common", $params);

文件 process.phpadmin-process.php 必须存在并处理表单。

注意:期望 ProjectSpecific extends ProjectCommon 类(@todo 用参数处理替换全局 $MyCMS)使用 $MyCMS 名称。

部署

/dist

/dist 文件夹包含用于使用 MyCMS 的新项目的初始 分发 文件,因此将其复制到新项目文件夹中。将字符串 MYCMSPROJECTNAMESPACE 替换为您的项目命名空间。将字符串 MYCMSPROJECTSPECIFIC 替换为其他网站特定信息(品牌、Twitter 地址、电话号码等)。

MyCMS 仅作为库使用,因此使用它的应用程序应实现 RedirectMatch 404 vendor\/ 语句,如 dist/.htaccess 中所建议的,以隐藏库从网络访问。

语言

以下设置是 MyCMS 所用应用程序期望的

define('DEFAULT_LANGUAGE', 'en');

以下文件是期望在应用程序中存在的

  • './language-' . $resultLanguage . '.inc.php';其中 $resultLanguage 是一个(ISO 3166-2)两位字母的语言代码。语言版本(或翻译,resp.)在实例化 MyCMS 对象时指定。例如
array(
    ...
    'TRANSLATIONS' => array(
        'en' => 'ENG',
        'cn' => '中文',
        'cs' => 'CZ'
    ),
)

管理员备注

客户端资源

class/Admin.php 中,您可以重新定义 clientSideResources 变量,以加载到管理员中。其默认值是

    protected $clientSideResources = [
        'js' => [
            'scripts/jquery.js',
            'scripts/popper.js',
            'scripts/bootstrap.js',
            'scripts/admin.js?v=' . PAGE_RESOURCE_VERSION,
        ],
        'css-pre-admin' => [
            'styles/bootstrap.css',
            ],
        'css' => [
            'styles/font-awesome.css',
            'styles/ie10-viewport-bug-workaround.css',
            'styles/bootstrap-datetimepicker.css',
            'styles/summernote.css',
            'styles/admin.css?v=' . PAGE_RESOURCE_VERSION,
        ]
    ];

admin.css 可以继承到子项目中,但是因为供应商文件夹应该拒绝浏览器访问,所以该标准 admin.css 的内容必须通过方法 MyAdmin::getAdminCss 获取。

测试

从命令行运行

./vendor/bin/phpunit

请注意,dist文件夹包含基于MyCMS的项目部署和测试运行,因此为了开发,还需要为dist设置环境。

待办事项

  • 190705: classes\LogMysqli.php正在进行日志记录'log/sql' . date("Y-m-d") . '.log.sql'到当前脚本的调用目录——这对于API来说并不理想。如何从APP_ROOT开始?
  • 190723: 如果在同一域名下存在两个不同的MyCMS实例,那么登录到admin.php时,即使该用户不存在,也会登录到所有实例。
  • 待检查 190723: 设置密码不应存储在log.sql中——调用BackyardMysqli实例而不是LogMysqli实例?@crs2: 添加参数(到LogMysqli.php中的query())来抑制error_log()调用是否可以解决这个问题?然后在更改密码时调用该参数?+ 我还想到一个解决方案,即在表列级别,即在LogMysqli.php中定义哪些表包含用于日志记录的敏感数据。但这将需要解析SQL。
  • 200314: 友好URL管理在F4T/classes/Admin::outputSpecialMenuLinks()和::sectionUrls()中,将其通用化到MyCMS,并启用FRIENDLY_URL == true时