如何获得Prestashop中的所有附件列表
我正在使用应显示最新(定义计数)添加附件的自定义模块。 我看到这一段代码在类/ 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模块。
这取决于语言,但试试这个:
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。
谢谢,但得到了错误500. public static function getLatestAttachments($ id_lang,$ n = 5)去Attachment.php类。留在模块php和tpl上。我认为查询有问题。 – PipBoy2000
我还没有测试过。我没有任何联系。你可以打开调试模式吗?在你的condif/defines.inc.php中改变define('_ PS_MODE_DEV_',false);定义('_ PS_MODE_DEV_',true);并发布错误?你也应该把这个函数放在附件中。使用类Attachment创建文件/override/classes/Attachment.php扩展AttachmentCore,然后粘贴该函数。然后删除/重命名文件缓存/ class_index.php。 – sadlyblue
最糟糕的事情是,开发模式不工作,我不能看到问题在哪里:(如果你将检查模块,并演示一些演示,我可以给你几块钱PP。谢谢!!! :) – PipBoy2000
你想要多少附件的最新附件?只有用户语言或所有语言的附件? – sadlyblue
嗨!在tpl foreach循环中,由模块config(看起来确切的block manufacuter){if $ smarty.foreach.attachment_list.iteration PipBoy2000