使用 LiteCart 编码很有趣。但是,如果您不知道该去哪里寻找,那么让自己学习一个新平台可能会很困难。在此页面上,我们收集了一些值得注意的信息,这些信息将帮助您更好地找到和了解该平台。
文件夹引用
LiteCart 使用两种方式引用应用程序根文件夹:
- FS_DIR_APP – 文件系统(服务器端)路径
- WS_DIR_APP – Web系统(客户端)路径
文件系统路径 (FS_DIR_APP)
FS_DIR_APP 是应用程序根目录的绝对路径。它在服务器端使用,并根据机器和安装转换为类似/var/www/litecart/
或类似的内容C:/xampp/htdocs/litecart/
。
下面的例子:
include FS_DIR_APP . 'includes/app_footer.inc.php';
Web 系统路径 (WS_DIR_APP)
WS_DIR_APP 是客户端应用程序根目录的 Web 路径(URL 路径)。它被翻译成类似/的东西。
下面的例子:
<script src="<?php echo WS_DIR_APP . 'assets/script.js'; ?>"></script>
文件夹结构
在 LiteCart 的早期,我们采用了让人想起 osCommerce 的目录布局。我们专门针对 osCommerce 用户迁移到 LiteCart,他们需要一个他们可以识别的文件夹结构。现在情况已不再如此,LiteCart 3.0 配备了全新的目录结构。
这是 LiteCart 2.3+ 的当前文件夹结构:
/ – Root ├── admin/ – Backend │ ├── *.app/ – Admin apps │ └── *.widget/ – Dashboard widgets ├── cache/ – Cache Directory ├── data/ – Data Storage ├── ext/ – Extensions/Extras/External/Vendors/Assets │ ├── jquery/ │ └── ... ├── images/ – Graphics ├── includes/ │ ├── abstracts/ – Class templates │ ├── boxes/ – Partials │ ├── entities/ – Entity Objects │ ├── functions/ – Defined functions called via lib_func.inc.php using functions::name() │ ├── library/ – System nodes and events │ ├── modules/ – Modules │ ├── references/ – Read-only factory model reference objects │ ├── routes/ – Route mapping │ ├── templates/ – HTML and Output │ └── wrappers/ – Wrappers, Service Layers, and Clients ├── install/ – Installation wizard ├── logs/ – Application logs ├── pages/ – Documents └── vmods/ – Modifcations └── .cache/
请注意,LiteCart 3.0.0 中的文件夹结构可能会发生变化。
系统节点/库
LiteCart 的核心包含一组系统节点,它们是平台的手臂。将其视为章鱼,其中每个肢体都是一个系统节点。每个节点专门研究特定事物(例如语言、货币、数据库等)。系统节点的主要目的是保存和处理信息,并且可以响应某些规定的事件。
LiteCart的按需设计框架使平台速度超级快!一旦您访问节点,LiteCart 会自动仅将必要的 php 文件加载到系统中。
系统节点是静态类。只需键入nodename::method() 或nodename::$variable 即可访问它们。
以下命令将加载语言组件 ~/includes/library/lib_language.inc.php,启动它,检测要使用的语言,设置一些应用程序事件,并从数据库收集结果并将其返回。全部来自命令:
echo language::translate('title_hello_world', 'Hello World');
$formatted_price = currency::format_html(199.99, 'USD');
$tax = tax::get_tax($price, $tax_class_id, $region);
数据库连接
当查询需要时,会自动打开与默认数据库的连接。
要发出 MySQL 查询请求并获取结果,标准过程如下:
$query = database::query( "select * from ". DB_TABLE_PREFIX ."mytable
order by id;" ); while ($row = database::fetch($query)) { ... }
请注意,所有 LiteCart 表的前面都有一个定义为 DB_TABLE_PREFIX 的表前缀,位于includes/config.inc.php 中。
辅助函数
无需跟踪包含的函数文件。需要时,函数会通过 lib_functions.inc.php 中的系统节点动态加载。
所有辅助函数都存储在 ~/includes/functions/ 中。文件名前面带有前缀“func_”。函数的名称必须以集合名称开头。示例:func_form.inc.php 将托管名为 form_something() 的所有辅助函数。
加载 ~/includes/functions/form.inc.php (如果之前没有加载)并调用 form_draw_textarea():
functions::form_draw_textarea()
实体对象
实体对象是控制对象数据及其到数据库的映射的类对象。它们类似于对象关系映射。通过启动一个实体,PHP 将为您自动加载所需的文件,并从数据库中检索其结构和数据。
要创建新产品并为其指定英文名称:
$product = new ent_product(); $product->data['name']['en'] = 'Test product'; $product->save();
要更新客户 ID 34 的电子邮件地址:
$customer = new ent_customer(34); $customer->data['email'] = '[email protected]'; $customer->save();
参考对象
引用对象是工厂设计的只读类模型,可以返回实体数据的部分部分,而不会浪费不必要的资源。这意味着只会对数据库进行必要的查询。
访问数据库并输出某个产品的英文产品名称:
$product = new ref_product($id); echo $product->name;
或者
echo reference::product($id)->name;
并非所有实体对象都可用作引用对象。如果不是,LiteCart 将回退到从同名实体对象中提取数据。这里我们通过引用节点访问订单,尽管没有文件 ref_order.inc.php:
reference::order($id)->customer['company'];
链接
LiteCart 可以输出 3 种类型的链接。 ilink()、link() 和 rlink()。
这些变体还有一个 href_*() 方法,可以在用作 html 节点参数时自动转义 html 字符。转义等于 htmlspecialchars(document::link(...))。
内部链接
内部链接用于平台的逻辑页面,例如产品、类别、客户服务等。
这是如何重定向到产品 id 123 的产品页面(即pages/product.inc.php)的示例:
header('Location: ' . document::ilink('product', ['product_id' => 123])); // ilink() will rewrite this URL exit;
外部链接
外部资源不需要 ilink 解析器,因为它们不是虚拟路由链接。
$link = document::link('https://wwwsite.com/resource', ['foo' => 'bar']); $link = document::link(WS_DIR_APP . 'images/myimage.png');
当不允许使用特殊字符时,即在 HTML 元素参数内使用 document::href_link():
<a href="<?php echo document::href_link(WS_DIR_APP . 'search.php')); ?>">My link</a>
资源链接
LiteCart 2.3+ 支持指向外部资源的链接,例如 js、css 等。资源链接将在 URL 中附加唯一的时间戳(例如 ?_=1628729661),以了解上次更新的时间。时间戳可防止浏览器在更新后加载缓存资源。请注意,文件夹路径是文件系统路径,而不是像 link() 中的 Web 路径。
以下代码将在页面上包含样式表:
<link rel="stylesheet" href="<?php echo document::href_rlink(FS_DIR_APP . 'assets/styles/mystyle.css'); ?>">
会议
LiteCart 中的会话处理非常简单。要获取或设置会话变量,只需通过系统节点访问它,例如session::$data['foo']。 LiteCart会根据需要自动加载系统节点,发起会话,并访问会话变量。安全性是内置的,因此您只需考虑获取或设置什么即可。
session::$data['foo'] = 'bar';
翻译
为了您的最大方便,我们将翻译存储在数据库中。获取翻译时,如果之前未存储,您可以插入默认翻译。这是通过直接在代码中提供第一个默认翻译来完成的。英语始终是框架语言和默认翻译。如果缺少任何其他语言的翻译,将返回英文翻译。
输出 title_hello_world 的翻译并将英文翻译注入数据库(如果之前没有注入):
echo language::translate('title_hello_world', 'Hello World');
模板布局
文档系统节点收集输出到布局或视图文件中的占位符的内容片段。
存储名为 foo_bar 的全局片段:
document::$snippets['foo_bar'] = '<h1>Foo bar!</h1>';
要在页面布局文件中插入片段内容的占位符:
{snippet:foo_bar}
然后,将输出的布局文件更改为 ~/includes/templates/my_template.catalog/layouts/my_layout.inc.php:
document::$layout = 'my_layout';
注意:在输出到浏览器之前,任何不包含代码片段内容的占位符都将被删除。
模板视图
LiteCart 尝试通过使用视图将逻辑与设计分离。
收集一些数据(称为片段)并将它们传递到视图以拼接在一起:
$my_content = new ent_view(); $my_content->snippets['greeting'] = 'Hello World'; echo $my_content->stitch('views/myview');
模板视图文件includes/yourtemplate/views/myview.inc.php支持以下语法:
<h1>{snippet:greeting}<h1> <h1><?php echo $greeting; ?><h1>
虚拟修改
LiteCart有一个内置的虚拟修改系统,称为vMod。专为 LiteCart 开发。
使用 vmod::check() 包装所有包含的 php 脚本。它将检查是否存在虚拟修改,将其应用于源代码,然后返回修改后的脚本以供包含。
include vmod::check(FS_DIR_APP . 'includes/directory/file.inc.php');
注意:由于虚拟修改的性质,依赖PHP 中的FILE和DIR常量将路径或目录返回到 self是不安全的。而是使用 FS_DIR_APP .'path/file.txt'。
客户端包装器
客户端包装器是像 API 客户端一样将功能包装在一起的对象。
这是如何使用 HTTP 客户端将数据发布到外部计算机的示例:
$client = new wrap_http(); $response = $client->call('POST', 'https://www.domain.com/destination', $post_data);