无法从活动模板目录连接到 joomla DB?

问题描述 投票:0回答:1

使用 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 日志。

有没有办法解决这个问题,以便我最终可以从提到的目录连接到数据库?

php database joomla
1个回答
0
投票

为了帮助调试脚本并查看错误信息,请在脚本顶部添加以下语句:

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 文件并跟踪它,您应该能够得出必要的代码。

© www.soinside.com 2019 - 2024. All rights reserved.