Magento2需要在自定义模块中创建下载链接

时间:2016-06-03 09:00:34

标签: magento magento2

我在Magento2中创建了简单的自定义模块。现在正确显示页面我需要在该页面上创建链接,下载模块web文件夹中的PDF文件。

  

对于Ex app \ code \ Magento \ Hello \ view \ frontend \ web \ pdf \ test.pdf

我该怎么办?我是否需要为新功能添加路由,如果是,我当前的路由文件是

  

\应用\代码\ Magento的\你好\等\前端\ routes.xml

<?xml version="1.0"?> 
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd">
    <router id="standard">
        <route id="hello" frontName="hello">
            <module name="Magento_Hello"/>
        </route>
    </router> 
</config>

其余文件是简单的模块文件,无需修改。

请告诉我在哪里需要编写链接的下载代码

谢谢。

2 个答案:

答案 0 :(得分:1)

这对我有用

 namespace Namespace\ModuleName\Controller\ControllerName;

 use Magento\Framework\App\Filesystem\DirectoryList;
 class Download extends \Magento\Framework\App\Action\Action
 {
    protected $directory_list;
    protected $fileFactory;
    public function __construct(
    \Magento\Framework\App\Action\Context $context, 
    DirectoryList $directory_list,
    \Magento\Framework\App\Response\Http\FileFactory $fileFactory) {
    $this->directory_list = $directory_list;
    $this->fileFactory = $fileFactory;
    parent::__construct($context);
 }

public function execute()
{
  $file = $this->getRequest()->getParam('file');

  if(isset($file) && !empty($file)) {

    $pdf = \Zend_Pdf::load($this->directory_list->getPath(DirectoryList::MEDIA) . DIRECTORY_SEPARATOR . $file);
    $fileName = test.pdf;
    $this->fileFactory->create(
    $fileName,
    str_replace('/Annot /Subtype /Link', '/Annot /Subtype /Link /Border[0 0 0]', $pdf->render()),
    \Magento\Framework\App\Filesystem\DirectoryList::VAR_DIR,
    'application/pdf'
      );
  }
 }
}

答案 1 :(得分:0)

变式1

如何将test.pdf移动到pub/media目录并像这样链接:

<a href="/pub/media/test.pdf">here</a>

但是应该动态收集pub/media目录,另请参阅:https://mage2.pro/t/topic/153

变式2

如果您想将资源保留在模块文件夹中,例如在view/frontend/web/Test.pdf中,您可以在您的phtml模板中找到这样的网址:

<?php echo $block->getViewFileUrl('Vendor_Modulename/Test.pdf'); ?>