2016-07-05 100 views
0

我是新來的一個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怎麼做呢?),
  • 得到定製databasetable的數據(不知道如何)
  • ,然後創建一個漂亮的頁面(不知道如何做到這一點;-))

我意識到這是一個很大的問題,但我真的不知道從哪裏開始。 谷歌搜索向我展示了很多帶有此警告的頁面「這個guite是爲Contao 2.x編寫的,它的很多信息已經過時!仔細閱讀並且只能用作通用指南。」和其他網頁是德語,儘管在高中學習了3年,而不是我的usp。

任何幫助表示讚賞。

回答

1

我希望我能很好的幫你。爲了達到你想要什麼,你需要創建兩個前端模塊,listModuledetailsModule和兩頁,末頁detailsPage因此在後端(網站結構)創建這兩個頁面。您將添加listModulelistPagedetailsModuledetailsPage

除非沒有選項,否則不要硬編碼頁面標識。

讓我們開始瞭解如何通過創建listModule並將其添加到末頁鏈接到detailsPage

  1. 創建/system/modules/my_module/dca/tl_module.php
  2. 添加以下代碼並保存

$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'的頁面選擇器。選擇您在開始時創建的詳細信息頁面

  • 轉到articles -> listPage -> new選擇'模塊'作爲元素類型,並選擇您的列表模塊以上。我們在這裏很好。預覽你的頁面,你應該很好。

  • 現在讓我們建立detailsModule,並把它添加到detailsPage

    1. 按照細節模塊的compile函數只以上所有步驟,您將選擇相關內容作爲follows``

    $objItemDetails = $this->Database->execute("SELECT * FROM my_custom_table where id=".\Input::get('itemId'));

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

    這將有助於在詳細信息頁面在ID時間更改的情況下。它使它足夠動態。

    希望這會有所幫助

    +0

    非常好。非常感謝。 – Michel

    1

    要獲得在前端的產品清單:

    步驟1 /創建一個列表,模塊:

    • 進入「主題」
    • 點擊齒輪圖標
    • 創建新模塊
    • 給它起一個名字
    • 從下拉菜單中選擇模塊類型 (模型名稱OSE應該是這樣的: 「yourCustomModulNameList」或類似)

    步驟2 /嵌入新列表的模塊放入文章:

    • 去物品在主菜單
    • 編輯它應該包含列表中的文章
    • 選擇新的內容元素
    • 選擇「MODUL」類型
    • 選擇命名MODUL

    ...爲單個項目創建一個顯示頁面,步驟幾乎相同:

    • 創建讀者MODUL
    • 插入此讀寫MODUL在新頁面上(在新文章)
    • 告訴先前創建的列表-MODUL的地方,讀者-MODUL是

    希望這有助於:)

    相關問題