2017-08-02 114 views
0

我正在使用應顯示最新(定義計數)添加附件的自定義模塊。 我看到這一段代碼在類/ Attachment.php如何獲得Prestashop中的所有附件列表

public static function getAttachments($id_lang, $id_product, $include = true) 
{ 
    return Db::getInstance()->executeS(' 
     SELECT * 
     FROM '._DB_PREFIX_.'attachment a 
     LEFT JOIN '._DB_PREFIX_.'attachment_lang al 
      ON (a.id_attachment = al.id_attachment AND al.id_lang = '.(int)$id_lang.') 
     WHERE a.id_attachment '.($include ? 'IN' : 'NOT IN').' (
      SELECT pa.id_attachment 
      FROM '._DB_PREFIX_.'product_attachment pa 
      WHERE id_product = '.(int)$id_product.' 
     )' 
    ); 
} 

到目前爲止,我知道我不需要這個$包括檢查,所以我需要做像getAllattachments或類新的自定義靜態函數嗎?任何想法非常讚賞。

在模塊我有此

public function hookLeftColumn($params) 
{ 
    if (!$this->isCached('blockattachment.tpl', $this->getCacheId())) 
    { 
     $attachments = Attachment::getAttachments(); 
     foreach ($attachments as &$attachment) 
     { 
      $attachment['image'] = $this->context->language->iso_code.'-default'; 
      if (file_exists(_PS_MANU_IMG_DIR_.$attachment['id_manufacturer'].'-'.ImageType::getFormatedName('medium').'.jpg')) 
       $attachment['image'] = $attachment['id_manufacturer']; 
     } 

     $this->smarty->assign(array(
      'attachments' => $attachments, 
      'text_list' => Configuration::get('ATTACHMENT_DISPLAY_TEXT'), 
      'text_list_nb' => Configuration::get('ATTACHMENT_DISPLAY_TEXT_NB'), 
      'form_list' => Configuration::get('ATTACHMENT_DISPLAY_FORM'), 
      'display_link_manufacturer' => Configuration::get('PS_DISPLAY_SUPPLIERS'), 
     )); 
    } 
    return $this->display(__FILE__, 'blockattachment.tpl', $this->getCacheId()); 
} 

和TPL這一個

{if $attachments} 
     {if $text_list} 
      <ul class="bullet"> 
       {foreach from=$attachments item=attachment name=attachment_list} 
        {if $smarty.foreach.attachment_list.iteration <= $text_list_nb} 
        <li><a href="{$link->getAttachmentLink($attachment.id_attachment, $attachment.link_rewrite)|escape:'html'}" title="{l s='More about %s' sprintf=[$attachment.name] mod='blockattachment'}">{$attachment.name|escape:'html':'UTF-8'}</a></li> 
        {/if} 
       {/foreach} 
      </ul> 
     {/if} 
    {else} 
     <p>{l s='No new attachments' mod='blockattachment'}</p> 
    {/if} 

這一切都從將其與改變的功能GetManufacturer複製blockmanufacturer模塊。

+1

你想要多少附件的最新附件?只有用戶語言或所有語言的附件? – sadlyblue

+0

嗨!在tpl foreach循環中,由模塊config(看起來確切的block manufacuter){if $ smarty.foreach.attachment_list.iteration <= $ text_list_nb}中的變量設置了一個限制。從所有語言應該沒問題。感謝隊友的任何幫助 – PipBoy2000

回答

1

這取決於語言,但試試這個:

public static function getLatestAttachments($id_lang, $n = 5) 
{ 
    return Db::getInstance()->executeS(' 
     SELECT DISTINCT (a.`id_attachment`), a.`file`, a.`file_name`, a.`file_size`, al.`name` 
     FROM '._DB_PREFIX_.'attachment a 
     LEFT JOIN '._DB_PREFIX_.'attachment_lang al 
      ON (a.id_attachment = al.id_attachment AND al.id_lang = '.(int)$id_lang.') 
     ORDER BY a.`id_attachment` DESC'. 
     ($n > 0 ? ' LIMIT '.$n : '') 
    ); 
} 

然後你的模塊中,你並不需要得到所有附件:

public function hookLeftColumn($params) 
{ 
    if (!$this->isCached('blockattachment.tpl', $this->getCacheId())) 
    { 
     $attachments = Attachment::getLatestAttachments($this->context->language->id, Configuration::get('ATTACHMENT_DISPLAY_TEXT_NB')); 
     foreach ($attachments as &$attachment) 
     { 
      $attachment['image'] = $this->context->language->iso_code.'-default'; 
      if (file_exists(_PS_MANU_IMG_DIR_.$attachment['id_manufacturer'].'-'.ImageType::getFormatedName('medium').'.jpg')) 
       $attachment['image'] = $attachment['id_manufacturer']; 
     } 

     $this->smarty->assign(array(
      'attachments' => $attachments, 
      'text_list' => Configuration::get('ATTACHMENT_DISPLAY_TEXT'), 
      'form_list' => Configuration::get('ATTACHMENT_DISPLAY_FORM'), 
      'display_link_manufacturer' => Configuration::get('PS_DISPLAY_SUPPLIERS'), 
     )); 
    } 
    return $this->display(__FILE__, 'blockattachment.tpl', $this->getCacheId()); 
} 

而且你的TPL:

{if $attachments} 
     {if $text_list} 
      <ul class="bullet"> 
       {foreach from=$attachments item=attachment name=attachment_list} 
        <li><a href="{$link->getAttachmentLink($attachment.id_attachment, $attachment.name)|escape:'html'}" title="{l s='More about %s' sprintf=[$attachment.name] mod='blockattachment'}">{$attachment.name|escape:'html':'UTF-8'}</a></li> 
       {/foreach} 
      </ul> 
     {/if} 
    {else} 
     <p>{l s='No new attachments' mod='blockattachment'}</p> 
    {/if} 

順便說一句,我不認爲有附件link_rewrite。

+0

謝謝,但得到了錯誤500. public static function getLatestAttachments($ id_lang,$ n = 5)去Attachment.php類。留在模塊php和tpl上。我認爲查詢有問題。 – PipBoy2000

+1

我還沒有測試過。我沒有任何聯繫。你可以打開調試模式嗎?在你的condif/defines.inc.php中改變define('_ PS_MODE_DEV_',false);定義('_ PS_MODE_DEV_',true);併發布錯誤?你也應該把這個函數放在附件中。使用類Attachment創建文件/override/classes/Attachment.php擴展AttachmentCore,然後粘貼該函數。然後刪除/重命名文件緩存/ class_index.php。 – sadlyblue

+0

最糟糕的事情是,開發模式不工作,我不能看到問題在哪裏:(如果你將檢查模塊,並演示一些演示,我可以給你幾塊錢PP。謝謝!!! :) – PipBoy2000

相關問題