4

我正在努力在网格的自定义列上添加一个简单的网站链接。我使用Incho 博客为该列添加了一个自定义渲染器,它可以工作。我虽然只修改渲染并添加标签就足够了。但我的希望破灭了,是行不通的。

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

这是我的 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>';
    }
}
?>
4

2 回答 2

4

您的意思是红色的样式可以正常工作,但是如果您取消注释该行,<a href..>它不是吗?

我认为您只是错过了 href 属性中的引号。

return '<a href="http://'.$value.'">'.$value.'</a>';
于 2012-10-17T09:58:11.497 回答
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; ?>
于 2012-10-18T13:28:53.017 回答