通过清心醉

magento开发-为产品URL强制添加用户名

我们都知道,magento可以通过块/控制器直接来操作模型进行数据库的操作.

magento产品添加,要想强制在URL上添加用户名,必须要找到块类

流程是:控制器->布局->通过Block引用

居然有提到布局,那么就肯定会有xml的布局配置文件

adminhtml里有个catalog.xml配置文件:

<adminhtml_catalog_product_new>
<update handle=”editor”/>
<reference name=”content”>
<block type=”adminhtml/catalog_product_edit” name=”product_edit”></block>
</reference>
<reference name=”left”>
<block type=”adminhtml/catalog_product_edit_tabs” name=”product_tabs”></block>
</reference>
<reference name=”js”>
<block type=”adminhtml/catalog_product_edit_js” template=”catalog/product/js.phtml” name=”catalog_product_js”></block>
<block type=”core/template” template=”catalog/wysiwyg/js.phtml”/>
</reference>
</adminhtml_catalog_product_new>

这是后台添加新产品的一个实现功能

adminhtml/catalog_product_edit 好了,在这我们就知道块文件在哪了

adminhtml/block/catalog/product/edit.phtml

class Mage_Adminhtml_Block_Catalog_Product_Edit extends Mage_Adminhtml_Block_Widget
{
public function __construct()
{
parent::__construct();
$this->setTemplate(‘catalog/product/edit.phtml’);
$this->setId(‘product_edit’);
}

….

}

构造方法里就强制调用了模板,这样就简单操作了.

form action=”<?php echo $this->getSaveUrl() ?>

在Edit.php块里可以看到:

public function getValidationUrl()
{
return $this->getUrl(‘*/*/validate’, array(‘_current’=>true));
}

public function getSaveUrl()
{
return $this->getUrl(‘*/*/save’, array(‘_current’=>true, ‘back’=>null));
}

一个是AJAX提交JSON修改产品方法,一个是保存的方法即新增加产品.

不知道提交的控制器是否一样,暂时先不管,首先我们为新增加的产品的URL进行截获.

/adminhtml/controllers/catalog/productcontroller.php文件里

protected function _initProductSave()方法里有个

$productData = $this->getRequest()->getPost(‘product’);

处理接收POST过来的product的数组,打印可以查看.

在写个方法来进行URL_KEY的对比:

public static function setProductUrlMall($key)
{
/**
* 暂时不对中文字符串URL进行截取修改
*/
$data; //组合的URL;
$userid=Mage::getSingleton(‘admin/session’)->getUser()->getUserId();
$text=”fob-“.$userid.”-“;
$textleng=strlen($text); //查看mall+用户ID的长度
$keyleng=strlen($key); //查看url_key的长度
if ($keyleng<=$textleng) //如果传递过来的都小于默认,那肯定就要重新组合了.
{
$data=”$text”.”$key”;
return $data;
}
else
{ //如果URL的长度大于默认数字
$tempkey=substr($key, 0,$textleng); //提取URL与默认值相同长度的前X位
if ($tempkey==$text)
{
//如果前X位与默认值相同,那表示已经存在了
return $key;
}
else
{
$data=”$text”.”$key”;
return $key;
}
}
}

 

然后修改_initProductSave()的方法:

$urlkey=Mage::setProductUrlMall($productData[‘url_key’]); //将URL传递给方法进行判断组合.

unset($productData[‘url_key’]);
$productData[‘url_key’]=$urlkey;

 

关于作者

清心醉 administrator