使用 shaper_helix3 模板,我很难从放置在 /templates/shaper_helix3/custom.php 目录中的 custom.php 连接到数据库。我正在发送一个带有一些外部 js 代码的参数,这很好捕获,但无法使数据库部分工作。
不知道我会错过什么,因为我知道一些 php,但我是 joomla 的新手。
这是我在连接到数据库时尝试运行的完整 php 脚本:
<?php
try {
$countryId = isset($_POST['country_id']) ? (int) $_POST['country_id'] : 0;
if ($countryId > 0) {
$db = JFactory::getDbo();
$query = $db->getQuery(true)
->select('zone_name')
->from($db->quoteName('q82fq_eshop_zones'))
->where($db->quoteName('country_id') . ' = ' . $db->quote($countryId));
$db->setQuery($query);
$comunas = $db->loadObjectList();
$opciones = [];
foreach ($comunas as $comuna) {
$opciones[] = [
'value' => $comuna->zone_name,
'label' => $comuna->zone_name,
];
}
echo json_encode(['success' => true, 'choices' => $opciones]);
} else {
echo json_encode(['success' => false, 'message' => 'Invalid country ID.']);
}
} catch (Exception $e) {
echo json_encode(['success' => false, 'message' => 'Error: ' . $e->getMessage()]);
}
?>`
脚本甚至没有完全执行,因为它因以下行中的错误而终止: db = JFactory::getDbo();我没有从服务器收到任何错误详细信息。
我也尝试添加 ddefine('_JEXEC') 或死掉;在请求文件时,但他们的脚本就死了。运行脚本时,joomla 日志文件中没有 tracket 日志。
有没有办法解决这个问题,以便我最终可以从提到的目录连接到数据库?
为了帮助调试脚本并查看错误信息,请在脚本顶部添加以下语句:
error_reporting(E_ALL);
ini_set('display_errors', 1);
因为该脚本尚未加载 Joomla 库,所以调用
JFactory::getDbo()
时会失败,因为该脚本中尚未加载 Joomla。
根据您使用的版本,代码可能会有所不同,但类似这样的内容应该可以帮助您入门。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
/**
* Constant that is checked in included files to prevent direct access.
* define() is used rather than "const" to not error for PHP 5.2 and lower
*/
define('_JEXEC', 1);
// Include the Joomla framework
require_once dirname(__FILE__) . '/../../includes/defines.php';
require_once dirname(__FILE__) . '/../../includes/framework.php';
// Initialize the Joomla application
$app = JFactory::getApplication('site');
// Get the database object
$db = JFactory::getDbo();
// Rest of your code here...
因为您声明您的脚本位于
templates/shaper_helix3/custom.php
中,所以 Joomla 核心文件位于向上 2 个目录,因此 require 语句会在“includes”目录中查找 Defines.php 和 Framework.php,该目录比“includes”目录向上两个目录当前位置。
这样的事情应该可以帮助你开始。如果您查看 Joomla 安装的 index.php 文件并跟踪它,您应该能够得出必要的代码。