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命令编译它,但是有一天你发现每次 ...
随机推荐
- awesome-scala
https://github.com/lauris/awesome-scala Awesome Scala A community driven list of useful Scala libra ...
- sublime text 3 package control
使用Ctrl+`快捷键或者通过View->Show Console菜单打开命令行,粘贴如下代码: import urllib.request,os; pf = 'Package Control. ...
- 【HDU4419 Colourful Rectangle】 线段树面积并
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4419 题目大意:给你n个矩形,每个矩形都有一种颜色,矩形覆盖会出现另外一种颜色,问你所有矩形中不同的颜 ...
- 大量查询SQL语句 实例
1.查看表结构语句:DESC 表名 2.查询所有列:select * from 表名 3.查询指定列:select 字段名 form 表名 4.查询指定行:SELECT * ...
- Python多行注释
由于Python的注释只有针对于单行的注释(用#),多行注释时很不方便(要想多行注释只能每行代码前面都加上#).在网上看到一个Python的多行注释方法,分享给大家,其实很简单的,就是使用一对三个双引 ...
- C#写的CRC16检验算法
/// <summary> /// CRC校验 /// </summary> public class CRC { #region CRC16 public static by ...
- Mysql5.5命令行修改密码
今天下载了mysql5.5.45免安装版,配置好之后发现mysql默认是没有设置密码的,也就是密码为空. 如果是本机作开发测试用,有无密码倒也无所谓,不过发布在服务器上没有密码肯定是不行的,那就需要设 ...
- CSS权威指南 - 内边距 边框 和 外边距
九十年代的完全用表格布局,简单的段落边框都需要用表格.CSS让布局更方便. 基本元素框 basic element boxes 如同第七章基本视觉格式化那一章讲到,每个文档元素会生成一个元素框,这个框 ...
- PHP Header下载文件在IE文件名中文乱码问题
解决PHP Header下载文件在IE文件名中文乱码有两种常见的,一种是是把页面编码改成utf8,另一种是对中文url进入urlencode编码,根据UA检测,区别下载,就可以解决了 $filenam ...
- 生产环境下的mysql主从复制
一.主mysql配置:1.配置my.cnf[mysqld]server-id = 10 #服务器标示log-bin= mysql-bin #二进制日志binlog-do-db=mydb #需要同步的数 ...