Magento,网格,添加链接到网站的列

时间:2012-10-17 09:52:46

标签: magento hyperlink grid magento-1.7

我正在敲打我的脑袋,在网格的自定义列上添加一个简单,简单的网站链接。我使用Inchoo blog为列添加自定义渲染器并且它可以正常工作。我只是修改渲染并添加标记就足够了。但我的希望破灭了,不起作用。

怎么做到这一点?应该很简单,但我无法找到如何。我在SO中发现了很多问题/答案,但是关于添加产品,类别等的链接,没有引用外部网站,也许我只是在搜索中使用了错误的关键字。

这是我的Grid.php中的_prepareColumns()

protected function _prepareColumns() {
    $blog = Mage::getModel('blogtest/blog');

    $this->addColumn('api_blog_url', array(
            'header' => $this->__('URL'),
            'align' => 'center',
            'index' => 'api_blog_url',
            'width' => 50,
            'type' => 'text',
            'renderer' =>  'Dts_Blogtest_Block_Adminhtml_Blog_Renderer_MyRender'
    ));
....

这是我对该列的渲染覆盖:

<?php
class Dts_Blogtest_Block_Adminhtml_Blog_Renderer_MyRender extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
{
    public function render(Varien_Object $row)
    {
        $value =  $row->getData($this->getColumn()->getIndex());
//      return '<a href="http://'.$value.'>'.$value.'</a>';
        return '<span style="color:red;">'.$value.'</span>';
    }
}
?>

2 个答案:

答案 0 :(得分:4)

你的意思是红色的样式它正常工作但是如果你用<a href..>取消注释它不是吗?

我认为你错过了href属性中的引用。

return '<a href="http://'.$value.'">'.$value.'</a>';

答案 1 :(得分:3)

顺便说一句,我认为,如果将使用下一种方法,你可以编写更好看的代码:在渲染功能中,你创建一个块并发送链接数据。之后,为此块创建块和模板。在模板中,您可以获得链接数据并根据需要显示它。

<?php
class Something
    extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
{
    public function render(Varien_Object $row)
    {
        $column_data = $row->getData(
            $this->getColumn()->getIndex()
        );

        return $this->getLayout()
            ->createBlock('something/adminhtml_renderer_link')
                ->setLink($column_data )
                    ->_toHtml();
    }
}
?>

<?php
class Something
    extends Mage_Core_Block_Template
{
    protected function _construct()
    {
        parent::_construct();
        $this->setTemplate('something/link.phtml');
    }
}
?>

<?php
$link = $this->getLink();
?>
<?php if ($link): ?>
<a href="<?php echo $link ?>" target="_blank"><?php echo $this->__('Click to view!'); ?></a>
<?php else: ?>
    <?php echo $this->__('No link'); ?>
<?php endif; ?>