从自定义模块读取和显示数据
Reading and showing data from a custom module
我是 Contao 项目的新手,也是该项目唯一的开发人员....
自定义模块已创建。对于此自定义模块,有一个数据输入表单(在 dca
文件夹中的 php 文件中定义),用户可以在其中输入所有数据,然后存储在自定义 table.
该模块的代码遵循博文 'Create a custom module - the basics' (http://blog.qzminski.com/article/create-a-custom-module-the-basics.html).
中所述的布局
我看到了一个 PHP 页面(在 templates
文件夹中),它从自定义数据库 table 获取所有数据(通过变量自动注入?)和格式html table.
这就是目前构建的内容。
现在我要做的是为单个项目创建一个显示页面。通常是:
- 在已有的htmltable中创建一个link(带有记录的id)
links 到一个新页面(例如
pagenamewhichidonotknow?id=34
)
- 然后在该页面上,接收由 link 发送的 ID(从
querystring
获取?),
- 从自定义数据库获取数据table(不知道怎么做)
- 然后创建一个漂亮的页面(知道怎么做 ;-))
我意识到这是一个大问题,但我真的不知道从哪里开始。
谷歌搜索显示了很多带有此警告的页面 "This guite was written for Contao 2.x and a lot of it's information is outdated! Read with care and only use as a general-purpose guide." 和其他页面是德语的,尽管我在高中学了 3 年,但不是我的 usp。
感谢任何帮助。
在前端获取项目列表:
第 1 步/创建一个列表模块:
- 转到"themes"
- 单击齿轮图标
- 创建一个新模块
- 给它起个名字
- 从下拉列表中选择模块类型
(选择的模型名称应该是这样的:
"yourCustomModulNameList" 或类似)
步骤 2 / 将新的列表模块嵌入到文章中:
- 转到主菜单中的文章
- 编辑应包含列表的文章
- 选择新的内容元素
- 选择"Modul"作为类型
- select 你命名的模块
...为单个项目创建展示页面,步骤几乎相同:
- 创建一个 reader-modul
- 将此 reader-模块插入新页面(在新文章中)
- 告诉之前创建的 list-modul reader-modul 在哪里
希望这对您有所帮助:)
希望我能让你好起来。为了实现你想要的,你需要创建两个前端模块,listModule 和 detailsModule 和两个页面,listPage 和 detailsPage 因此在后端(站点结构)中创建这两个页面。您将 listModule 添加到 listPage 并将 detailsModule 添加到 detailsPage.
切勿对页面 ID 进行硬编码,除非您别无选择。
让我们开始了解如何通过创建 listModule 并将其添加到 到 detailsPage =]listPage
- 创建
/system/modules/my_module/dca/tl_module.php
- 添加以下代码并保存
$GLOBALS['TL_DCA']['tl_module']['palettes']['my_module'] = '{title_legend},name,headline,type,linkToDetail;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID,space';
$GLOBALS['TL_DCA']['tl_module']['fields']['linkToDetail']=array(
'label' => &$GLOBALS['TL_LANG']['tl_module']['linkToDetail'],
'exclude' => true,
'inputType' => 'pageTree',
'foreignKey' => 'tl_page.title',
'eval' => array('fieldType'=>'radio'),
'sql' => "int(10) unsigned NOT NULL default '0'",
'relation' => array('type'=>'hasOne', 'load'=>'eager')
);
这将在您的自定义 table 中创建一个列,稍后您将使用它来访问模板中的页面 ID
- 运行 安装工具。
- 解决可能出现的任何错误。如果none,转到下一步
根据这个创建前端模块url Front end module
在compile
函数中做如下
protected function compile(){
$objItems = $this->Database->execute("SELECT * FROM my_custom_table");
if (!$objItems->numRows)
{
return;
}
$arrItems = array();
// Generate item rows
while ($objItems->next())
{
$objPage = \PageModel::findPublishedById($objItems->linkToDetail);
$arrItems[] = array
(
'linkToDetail' => $objPage->getFrontendUrl('itemId='.$objItems->id),
);
}
$this->Template->items = $arrItems;
}
请注意url
中添加的itemId参数
创建模板/system/modules/my_module/templates/my_template.html5
您将能够轻松访问这些项目
<?php if($this->items): foreach ($this->items as $item): ?>
<div class="item">
<?php if ($item['linkToDetail']): ?>
<a href="<?php echo $item['linkToDetail']; ?>">Please take me to the details page</a><?php endif; ?>
</div>
<?php endforeach; endif; ?>
现在转到 themes -> modules ->new module
并创建一个新模块。我假设您已按照 link 中关于如何将模块添加到模块列表中的说明进行操作。假设您添加到杂项组,select 您的模块。您将看到带有标签 'linkToDetail' 的页面选择器。 select 您在开始时创建的 detailsPage。
转到 articles -> listPage -> new
select 'module' 作为元素类型,然后选择上面的 listModule。我们在这里很好。预览你的页面,你应该没问题。
现在让我们构建 detailsModule 并将其添加到 detailsPage
- 按照以上所有步骤只是在详情模块的
compile
函数中,您将select详情数据如下``
$objItemDetails = $this->Database->execute("SELECT * FROM my_custom_table where id=".\Input::get('itemId'));
步骤 7,8 和 9 相同。
这将有助于详细信息页面随着 ID 的变化而变化的情况。它使它足够动态。
希望对您有所帮助
我是 Contao 项目的新手,也是该项目唯一的开发人员....
自定义模块已创建。对于此自定义模块,有一个数据输入表单(在 dca
文件夹中的 php 文件中定义),用户可以在其中输入所有数据,然后存储在自定义 table.
该模块的代码遵循博文 'Create a custom module - the basics' (http://blog.qzminski.com/article/create-a-custom-module-the-basics.html).
我看到了一个 PHP 页面(在 templates
文件夹中),它从自定义数据库 table 获取所有数据(通过变量自动注入?)和格式html table.
这就是目前构建的内容。
现在我要做的是为单个项目创建一个显示页面。通常是:
- 在已有的htmltable中创建一个link(带有记录的id)
links 到一个新页面(例如
pagenamewhichidonotknow?id=34
) - 然后在该页面上,接收由 link 发送的 ID(从
querystring
获取?), - 从自定义数据库获取数据table(不知道怎么做)
- 然后创建一个漂亮的页面(知道怎么做 ;-))
我意识到这是一个大问题,但我真的不知道从哪里开始。 谷歌搜索显示了很多带有此警告的页面 "This guite was written for Contao 2.x and a lot of it's information is outdated! Read with care and only use as a general-purpose guide." 和其他页面是德语的,尽管我在高中学了 3 年,但不是我的 usp。
感谢任何帮助。
在前端获取项目列表:
第 1 步/创建一个列表模块:
- 转到"themes"
- 单击齿轮图标
- 创建一个新模块
- 给它起个名字
- 从下拉列表中选择模块类型 (选择的模型名称应该是这样的: "yourCustomModulNameList" 或类似)
步骤 2 / 将新的列表模块嵌入到文章中:
- 转到主菜单中的文章
- 编辑应包含列表的文章
- 选择新的内容元素
- 选择"Modul"作为类型
- select 你命名的模块
...为单个项目创建展示页面,步骤几乎相同:
- 创建一个 reader-modul
- 将此 reader-模块插入新页面(在新文章中)
- 告诉之前创建的 list-modul reader-modul 在哪里
希望这对您有所帮助:)
希望我能让你好起来。为了实现你想要的,你需要创建两个前端模块,listModule 和 detailsModule 和两个页面,listPage 和 detailsPage 因此在后端(站点结构)中创建这两个页面。您将 listModule 添加到 listPage 并将 detailsModule 添加到 detailsPage.
切勿对页面 ID 进行硬编码,除非您别无选择。
让我们开始了解如何通过创建 listModule 并将其添加到 到 detailsPage =]listPage
- 创建
/system/modules/my_module/dca/tl_module.php
- 添加以下代码并保存
$GLOBALS['TL_DCA']['tl_module']['palettes']['my_module'] = '{title_legend},name,headline,type,linkToDetail;{protected_legend:hide},protected;{expert_legend:hide},guests,cssID,space';
$GLOBALS['TL_DCA']['tl_module']['fields']['linkToDetail']=array(
'label' => &$GLOBALS['TL_LANG']['tl_module']['linkToDetail'],
'exclude' => true,
'inputType' => 'pageTree',
'foreignKey' => 'tl_page.title',
'eval' => array('fieldType'=>'radio'),
'sql' => "int(10) unsigned NOT NULL default '0'",
'relation' => array('type'=>'hasOne', 'load'=>'eager')
);
这将在您的自定义 table 中创建一个列,稍后您将使用它来访问模板中的页面 ID
- 运行 安装工具。
- 解决可能出现的任何错误。如果none,转到下一步
根据这个创建前端模块url Front end module
在
compile
函数中做如下
protected function compile(){
$objItems = $this->Database->execute("SELECT * FROM my_custom_table");
if (!$objItems->numRows)
{
return;
}
$arrItems = array();
// Generate item rows
while ($objItems->next())
{
$objPage = \PageModel::findPublishedById($objItems->linkToDetail);
$arrItems[] = array
(
'linkToDetail' => $objPage->getFrontendUrl('itemId='.$objItems->id),
);
}
$this->Template->items = $arrItems;
}
请注意url
中添加的itemId参数创建模板
/system/modules/my_module/templates/my_template.html5
您将能够轻松访问这些项目
<?php if($this->items): foreach ($this->items as $item): ?>
<div class="item">
<?php if ($item['linkToDetail']): ?>
<a href="<?php echo $item['linkToDetail']; ?>">Please take me to the details page</a><?php endif; ?>
</div>
<?php endforeach; endif; ?>
现在转到
themes -> modules ->new module
并创建一个新模块。我假设您已按照 link 中关于如何将模块添加到模块列表中的说明进行操作。假设您添加到杂项组,select 您的模块。您将看到带有标签 'linkToDetail' 的页面选择器。 select 您在开始时创建的 detailsPage。转到
articles -> listPage -> new
select 'module' 作为元素类型,然后选择上面的 listModule。我们在这里很好。预览你的页面,你应该没问题。
现在让我们构建 detailsModule 并将其添加到 detailsPage
- 按照以上所有步骤只是在详情模块的
compile
函数中,您将select详情数据如下``
$objItemDetails = $this->Database->execute("SELECT * FROM my_custom_table where id=".\Input::get('itemId'));
步骤 7,8 和 9 相同。
这将有助于详细信息页面随着 ID 的变化而变化的情况。它使它足够动态。
希望对您有所帮助