4

グリッドのカスタム列に Web サイトへのプレーンでシンプルなリンクを追加しようと頭を悩ませています。Inhoo ブログを使用して、列のカスタム レンダラーを追加しましたが、機能します。レンダリングを変更してタグを追加するだけで十分だと思います。しかし、私の希望は打ち砕かれ、機能していません。

これはどのように行うことができますか?簡単なはずですが、方法がわかりません。ここSOで多くの質問/回答を見つけましたが、製品、カテゴリなどへのリンクの追加について、外部Webサイトへの参照はありません。検索で間違ったキーワードを使用しているだけかもしれません.

ここに私の 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 に答える