magento app开发遇到的问题及解决
今天一直在解决Magento的APP接口调用数据异常的问题,调用/api/rest/category/:id 这个接口的时候,返回的所有目录的数据是一样的,原始代码是这样的.
1)请求地址 /api/rest/category/3
2) 请求地址请求的是对应的类的_retrieve这个方法
protected function _retrieve()
{
$category_id = $this->getRequest()->getParam('id');
$categorys = array();
$nodes =Mage::getModel('catalog/category')->getCategories($category_id);
$nodes_count = count($nodes);
foreach($nodes as $node)
{
$category = Mage::getModel('catalog/category')->load($node->getId());
$data = $this->_renderData($category,$category_id,$nodes_count);
if($data) $categorys[] = $data;
}
return $categorys;
}
3)_retrieve这个方法调用的_renderData这个方法(没修改之前)
protected function _renderData($category, $category_id,$nodes_count)
{
$item = array();
$item['id'] = $category->getId();
$item['name'] = $category->getName(); //skip brands
if($category->getUrlKey()=='brands') return @$data; $item['url_key'] = $category->getUrlKey();
$item['thumbnail'] = $this->getThumbnailUrl($category);
$item['child'] = array();
$category_id = $this->getRequest()->getParam('id');
$category = Mage::getModel('catalog/category')->load($category_id);
$ids = $category->getChildren();
$id_array = explode(',', $ids);
$product_array = array();
foreach ($id_array as $key => $value) {
$products = Mage::getModel('catalog/category')->load($value)
->getProductCollection()
->addAttributeToSelect('*')
->addAttributeToFilter('status', 1)
->addAttributeToFilter('visibility', 4); $product_data =array();
foreach ($products as $product ) {
$image = $product->getImage();
$image_url = $this->getProductImageUrl($image);
$product_data[]= array(
'name'=>$product->getName(),
'sku' =>$product->getSku(),
'image'=>$image_url,
'price'=>$product->getPrice(),
'weight'=>$product->getWeight(),
'short_description'=>$product->getShort_description()
);
}
$product_array[] = $product_data;
}
$item['child']= $product_array; retrun $item;
}
运行了这些代码后,所有子目录下面都是一样的产品!!! 其实问题很简单,不用foreach两层嵌套这么麻烦,其实每次在_retrieve这个方法执行的时候其实就是给单独的产品追加属于自己的产品就可以了,如果像第三步一样,就相当于给所有目录就加上了一样的产品,_renderData改成下面的代码即可
4)正确代码
protected function _renderData($category, $category_id,$nodes_count)
{
$item = array();
$item['id'] = $category->getId();
$item['name'] = $category->getName(); //skip brands
if($category->getUrlKey()=='brands') return @$data; $item['url_key'] = $category->getUrlKey();
$item['thumbnail'] = $this->getThumbnailUrl($category);
$item['child'] = array(); $products = Mage::getModel('catalog/category')->load($item['id'] )
->getProductCollection()
->addAttributeToSelect('*')
->addAttributeToFilter('status', 1)
->addAttributeToFilter('visibility', 4); $product_data =array();
foreach ($products as $product ) {
$image = $product->getImage();
$image_url = $this->getProductImageUrl($image);
$product_data[]= array(
'name'=>$product->getName(),
'sku' =>$product->getSku(),
'image'=>$image_url,
'price'=>$product->getPrice(),
'weight'=>$product->getWeight(),
'short_description'=>$product->getShort_description()
);
}
$item['child'] = $product_data;
return $item;
}
改成上面的代码后,就正常了,工作中一定要弄懂基础的原理,问题有时候就迎刃
magento app开发遇到的问题及解决的更多相关文章
- C# Windows Phone App 开发,修改【锁定画面】,从【Assets】、【UI】、【网路图片】,并解决失灵问题。
原文:C# Windows Phone App 开发,修改[锁定画面],从[Assets].[UI].[网路图片],并解决失灵问题. 一般我们在开发Windows Phone App,有时会希望透过应 ...
- android软件简约记账app开发day05-记账页面条目代码优化和bug解决
android软件简约记账app开发day05-记账页面条目代码优化和bug解决 今天还是因为该bug又极大的耽误了项目进程,该开发文档都要没有时间来写了. 先说bug吧,在昨天已经实现了页面图标的展 ...
- 从中间件的历史来看移动App开发的未来
在移动开发领域我们发现一个很奇怪的现象:普通菜鸟新手经过3个月的培训就可以拿到 8K 甚至上万的工作:在北京稍微有点工作经验的 iOS 开发,就要求 2 万一个月的工资.不知道大家是否想过:移动应用开 ...
- App开发的新趋势
移动开发这些年,移动开发者人数越来越多,类似的培训公司发展也很快,不过伴随着的是移动应用的需求这几年发展更为旺盛.要开发好的App,纯原生开发肯定是最佳选择.但是这么多年发展,原生开发的难度并没有降低 ...
- html5 app开发,你知道多少?
随着大量新生移动设备的兴起,改变了互联网的未来,html5技术为开发者提供了一个跨平台的移动app开发方案,并且该方案具有很好的扩展性和灵活性,但就国内使用html5开发app应用技术来讲,还是有欠缺 ...
- 选择App开发外包时,你该了解哪些法律常识?
随着App需求的激增,选择App外包服务的客户也多了起来.然而客户和开发方对于其中的法律条款却不甚了解,导致在服务过程中,时常会发生一些分歧和纠纷,最终致使项目搁浅. 为了普及App外包的法律常识,移 ...
- phongap、APICloud、ionic等app开发平台你都知道吗?
大众创业热,很多人都想在互联网大展拳脚,然而大部分人却是非技术背景.针对这个行业痛点,现在国内外涌现出众多APP开发工具,开发者只要有相关的HTML5.CSS和JavaScript知识,便可以轻松快速 ...
- 手机app开发:浅谈APP登录方式的优劣
手机app开发公司亿合科技要是给你一个机会设计一款APP,你会用什么方式做这个APP的登录模块?根据APP的业务模型的不同会有不同的设计方法.如果是偏内容型的APP,需要优先展示内容给用户,当用户需要 ...
- Cordova+ionic 开发hybird App --- 开发环境搭建
Cordova 开发hybird App 开发环境搭建 一.一些基础概念: Ant : 简单说来可以这么理解,如果你用记事本写JAVA程序,然后在cmd里输入javac命令编译它,但是有一天你发现每次 ...
随机推荐
- C#常用方法二
public sealed class StringTool { /// <summary> /// 将txt文件读入字符串 /// </summary> /// <pa ...
- 分享一个在线生成站点地图SiteMap制作工具
站点地图SiteMap的好处是很大的,对Seo很有好处,能够更方便.迅速的让搜索引擎收录.WordPress 有不少生成Google Sitemap 的工具,但是有些只是针对WordPress的系统的 ...
- Windows Phone Foreground Toast
Basically ToastPrompt is an UI component that derives from the Coding4Fun toolkit's abstract PopUp&l ...
- SQL serve 聚合函数、字符串函数
1.聚合函数 sum,avg,max,min,count having后面只能跟聚合函数 2.数学函数和字符串函数 3.练习: 1)新建一个学生信息表,根据问题写出程序. 2)新建一个超 ...
- C# 在 vs2010 上开发 ActiveX 控件 【千辛万苦啊~】
由于B/S项目中需要使用到读卡器的功能,但是由于厂家只有提供一个 读卡的dll,那么怎样能在客户端使用读卡器呢,那么进过一番查找,最总决定使用ActiveX 控件来做.由于是第一次接触到 Active ...
- NLP 自然语言处理
参考: 自然语言处理怎么最快入门:http://www.zhihu.com/question/ 自然语言处理简介:http://wenku.baidu.com/link?url=W6Mw1f-XN8s ...
- Spinner的深入学习
简介: spinner是一个列表选择框,会在用户选择后,展示一个列表供用户进行选择.Spinner是ViewGroup的间接子类,它和其他的Android控件一样,数据需要使用Adapter进行封装. ...
- Unity学习疑问记录之新GUI
学习Unity 4.6新GUI系统 http://segmentfault.com/a/1190000000642686
- poj3292-Semi-prime H-numbers(筛法打表)
一,题意: 一个H-number是所有的模四余一的数.(x=4*k+1) 如果一个H-number是H-primes 当且仅当它的因数只有1和它本身(除1外). 一个H-number是H-semi ...
- C# 常用结构
几种常用类的基本结构如下: public Size( double width, double height ) public Point( double x, double y) public Ve ...