我是一个Contao项目的新手,也是项目中唯一的开发人员......
创建自定义模块。对于此自定义模块,有一个数据输入表单(在dca
文件夹中的php文件中定义),用户可以在其中输入所有数据,然后存储在自定义表中。
该模块的代码遵循博客文章“创建自定义模块 - 基础知识”(http://blog.qzminski.com/article/create-a-custom-module-the-basics.html)中所述的布局。
我见过一个PHP页面(在templates
文件夹中),它从自定义数据库表中获取所有数据(通过变量自动注入?)并在html表中格式化。
到目前为止,这是建立的。
现在我想要做的是为单个项目创建一个显示页面。通常情况是:
pagenamewhichidonotknow?id=34
)querystring
获取?),我意识到这是一个很大的问题,但我真的不知道从哪里开始。 谷歌搜索向我显示了很多页面,这个警告“这个guite是为Contao 2.x编写的,其中很多信息已经过时了!仔细阅读,只能用作通用指南。”和其他页面是德语,尽管已经在高中学习了3年,而不是我的usp。
感谢任何帮助。
答案 0 :(得分:1)
步骤1 /创建列表模块:
步骤2 /将新的List-Module嵌入到文章中:
希望这有助于:)
答案 1 :(得分:1)
我希望我能帮到你。要实现您的目标,您需要创建两个前端模块, listModule 和 detailsModule 以及两个页面, listPage 和 detailsPage < / strong>因此在后端创建这两个页面(站点结构)。您将 listModule 添加到 listPage ,将 detailsModule 添加到 detailsPage 。
除非您没有选项,否则切勿对页面ID进行硬编码。
让我们开始介绍如何通过创建 listModule 并将其添加到 listPage
来链接到 detailsPage/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')
);
这将在您的自定义表格中创建一个列,稍后您将使用它来访问模板中的页面ID
根据此网址创建前端模块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;
}
请注意添加到网址的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
并创建一个新模块。我假设您已按照该链接中有关如何将模块添加到模块列表的说明进行操作。假设您已添加到其他组,请选择您的模块。您将看到一个标签为“linkToDetail”的页面选择器。选择您在开头创建的 detailsPage 。
转到articles -> listPage -> new
选择'模块'作为元素类型,然后选择上面的 listModule 。我们在这里很好。预览你的页面,你应该很好。
现在让我们构建 detailsModule 并将其添加到 detailsPage
compile
功能中,您将按如下方式选择详细信息。“ $objItemDetails = $this->Database->execute("SELECT * FROM my_custom_table where id=".\Input::get('itemId'));
步骤7,8和9是相同的。
这将有助于详细信息页面在ID时间更改的情况。它足够动态。
希望这有帮助