从自定义模块中读取和显示数据

时间:2016-07-05 08:23:29

标签: contao

我是一个Contao项目的新手,也是项目中唯一的开发人员......

创建自定义模块。对于此自定义模块,有一个数据输入表单(在dca文件夹中的php文件中定义),用户可以在其中输入所有数据,然后存储在自定义表中。 该模块的代码遵循博客文章“创建自定义模块 - 基础知识”(http://blog.qzminski.com/article/create-a-custom-module-the-basics.html)中所述的布局。

我见过一个PHP页面(在templates文件夹中),它从自定义数据库表中获取所有数据(通过变量自动注入?)并在html表中格式化。

到目前为止,这是建立的。

现在我想要做的是为单个项目创建一个显示页面。通常情况是:

  • 在现有的html表中创建一个链接(带有记录的id) 它链接到一个新页面(例如 pagenamewhichidonotknow?id=34
  • 并在该页面上,接收链接发送的ID(从querystring获取?),
  • 从自定义数据库表中获取数据(不知道如何)
  • 然后创建一个漂亮的页面(知道如何做到这一点; - ))

我意识到这是一个很大的问题,但我真的不知道从哪里开始。 谷歌搜索向我显示了很多页面,这个警告“这个guite是为Contao 2.x编写的,其中很多信息已经过时了!仔细阅读,只能用作通用指南。”和其他页面是德语,尽管已经在高中学习了3年,而不是我的usp。

感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

获取前端中的项目列表:

步骤1 /创建列表模块:

  • 转到"主题"
  • 点击齿轮图标
  • 创建新模块
  • 给它起个名字
  • 从下拉列表中选择模块类型 (要选择的模型名称应如下所示: " yourCustomModulNameList"或类似的)

步骤2 /将新的List-Module嵌入到文章中:

  • 转到主菜单中的文章
  • 编辑应包含列表的文章
  • 选择新的内容元素
  • 选择" Modul"作为类型
  • 选择您的命名模块

...要为单个项目创建显示页面,步骤几乎相同:

  • 创建一个reader-modul
  • 将此阅读器模块插入新页面(在新文章中)
  • 告诉先前创建的list-modul,其中reader-modul是

希望这有助于:)

答案 1 :(得分:1)

我希望我能帮到你。要实现您的目标,您需要创建两个前端模块, listModule detailsModule 以及两个页面, listPage detailsPage < / strong>因此在后端创建这两个页面(站点结构)。您将 listModule 添加到 listPage ,将 detailsModule 添加到 detailsPage

除非您没有选项,否则切勿对页面ID进行硬编码。

让我们开始介绍如何通过创建 listModule 并将其添加到 listPage

来链接到 detailsPage
  1. 创建/system/modules/my_module/dca/tl_module.php
  2. 添加以下代码并保存
  3. $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

    1. 运行安装工具。
    2. 处理可能出现的任何错误。如果没有,请转到下一个
    3. 根据此网址创建前端模块Front end module

    4. compile功能中执行以下操作

    5. 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参数

      1. 创建模板/system/modules/my_module/templates/my_template.html5

        您将可以轻松访问项目

      2. <?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; ?>

        1. 现在转到themes -> modules ->new module并创建一个新模块。我假设您已按照该链接中有关如何将模块添加到模块列表的说明进行操作。假设您已添加到其他组,请选择您的模块。您将看到一个标签为“linkToDetail”的页面选择器。选择您在开头创建的 detailsPage

        2. 转到articles -> listPage -> new选择'模块'作为元素类型,然后选择上面的 listModule 。我们在这里很好。预览你的页面,你应该很好。

        3. 现在让我们构建 detailsModule 并将其添加到 detailsPage

          1. 按照上述所有步骤,仅在详细信息模块的compile功能中,您将按如下方式选择详细信息。“
          2. $objItemDetails = $this->Database->execute("SELECT * FROM my_custom_table where id=".\Input::get('itemId'));

            步骤7,8和9是相同的。

            这将有助于详细信息页面在ID时间更改的情况。它足够动态。

            希望这有帮助