我们都知道,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;
关于作者