1

如何从单个数据库表中提取数据?

例如,我需要表中的数据:类别,列:id 为 1 的描述?

4

1 回答 1

6

只要您尝试编写 Joomla 组件,我建议您开始学习使用 MVC 架构编写代码。此处提供有关此主题的 Joomla 文档。无论如何,我会给你一个简单但临时的解决方案,你必须稍后使用 Joomla 的 MVC 重写它。

我假设您想从中选择数据column1并显示在一个简单的表格中。column2#__example_table

首先,您需要创建一个带有空视图的组件。您可以使用此在线工具一目了然地创建组件;当然,创建具有空视图的组件是免费的。在构建、下载和安装您的组件之后,我们称之为它,您的文件夹中com_mycomponent会出现一个文件夹。打开它,你会看到一个文件夹,在里面会有一个文件夹供你查看,我将称之为.com_mycomponent/componentsviewsmyview

在您的视图文件夹中,有一个名为的文件view.html.php,其中包含您的视图类,您还可以看到一个名为的文件夹tmpl,其中包含default.php您视图模板的文件。

现在view.html.php在编辑器中打开并创建一个名为$itemsgetData()方法的公共属性,display()方法如下:

<?php
class MycomponentViewMyview extends JView {

    .
    .
    .
    public $items;

    public function display($tpl = null) {
        .
        .
        .
        $this->items = $this->getData();

        parent::display($tpl);
    }

    public function getData() {
        $db = JFactory::getDbo();
        $query = $db->getQuery(true);
        $query->select(array('column1', 'column2'));
        $query->from('#__example_table');
        $query->where('condition = 1');
        $query->order('id DESC');
        $db->setQuery($query);
        $results = $db->loadObjectList();
        if (!empty($results)) {
            return $results;
        }
        return false;
    }

}

在这个例子中,我使用了这里描述的 Joomla 的数据库 API ;并认为点意味着您不需要更改的其余代码。

现在打开/components/com_mycomponent/views/myview/tmpl/defailt.php并删除这里的所有内容并编写如下内容:

<?php
defined('_JEXEC') or die; // No direct access

if (count($this->items)) {
?>
<table style="width: 100%">
    <thead>
        <tr>
            <th>Column 1</th>
            <th>Column 2</th>
        </tr>
    </thead>
    <tbody>
        <?php foreach ($this->items as $item) { ?>
        <tr>
            <td><?php echo $item->column1; ?></td>
            <td><?php echo $item->column2; ?></td>
        </tr>
        <?php } ?>
    </tbody>
</table>
<?php 
} else { 
    echo 'Sorry! No data found...';
}

我认为这个例子很清楚,不需要解释,但我会给你一个关于正在发生的事情的简要解释。首先,我们创建了一个方法来从数据库中获取数据并将它们存储在一个可以从外部访问的变量中。然后我们从 display 方法调用该方法,该方法是视图类的构造函数。然后在视图的模板中,我对存储在$items变量中的记录使用了一个循环,并将它们显示在表行中。

  • 我试图以最简单的方式解释解决方案,以便每个人都可以使用它,如果它打扰您,我很抱歉。
  • 随时提出问题并纠正我。
于 2013-05-22T18:47:38.413 回答