`
icrwen
  • 浏览: 266762 次
  • 性别: Icon_minigender_2
  • 来自: 济南
社区版块
存档分类
最新评论

cakephp工作笔记8 - JSON、树篇

    博客分类:
  • php
阅读更多
2010-4-1 天气小雨
工作任务:1)粮库数据表的添加 2)粮库树型结构的数据库保存和读取  3)编辑粮库树
bugs:1)flash的嵌入,问题在于的动态生成的div,不能被识别

2)extjs树型结构在cakephp的保存
   思路:将extjs的treepanel转为json数据格式,保存起来,cakephp再将json数据解析成一条条的记录保存到数据库中
    从根递归遍历树型结构
   节点有一个childNodes 属性可以获得他的所有子节点
节点又一个eachChild( Function fn, [Object scope], [Array args] ) : void 这样的方法可以遍历当前节点的所有子节点
节点有一个expandChildNodes( [Boolean deep] ) : void方法可以展开子节点包括展开子节点的子节点
节点有一个hasChildNodes() : Boolean方法可以判断他下面还有没有子节点

递归遍历数据函数,判断是否有没有叶子节点的路径
function checktree(root)
{
var bret = false;
if(root.leaf)
{
bret = true;
return bret;
}
else
{
  root.eachChild(function(child){
  bret = checktree(child);
  });
}
return bret;

}

4)为了保存大量的节点数据,在每个叶子节点增加了一个plugin

5)cakephp的数据保存例子、  function admin_add() {
        if (!empty($this->data)) {
            $this->Game->create();
            if ($this->Game->save($this->data)) {
            if (!isset($_POST['preview'])) {
            // 清空首页缓存
//clearCache('games_index');
            $this->Session->setFlash('添加成功');
                $this->_go_back();
            } else {
            $this->Session->setFlash('预览中...');
            $this->redirect('/games/preview/' . $this->Game->id);
            }
            } else {
                $this->Session->setFlash('操作失败');
            }
        }
        $this->set('categories', $this->Game->Category->find('list', array('order' => 'Category.sort')));
        $this->pageTitle = "游戏添加";
    }


http://book.cakephp.org/cn/view/75/Saving-Your-Data

function edit($id) {    //是否有数据被POST    if(!empty($this->data)) {        //If the form data can be validated and saved...        if($this->Recipe->save($this->data)) {            //Set a session flash message and redirect.            $this->Session->setFlash("Recipe Saved!");            $this->redirect('/recipes');        }    }     //没有的话,找到对应的食谱输出编辑画面    $this->set('recipe', $this->Recipe->findById($id));}


文件上传
http://zjnbshifox.iteye.com/blog/123399

图片下载读取
http://zhidao.baidu.com/question/68873635

http://www.3pcode.com/php/2004/12/9141.htm

http://www.phpzy.com/tags.php?/php%E4%B8%8B%E8%BD%BD%E8%BF%9C%E7%A8%8B%E5%9B%BE%E7%89%87/


<?php 

// php下载远程图片 

// 转载保留 

// 绿色php资源 http://www.phpzy.com  

// Function: 获取远程图片并把它保存到本地  

// 确定您有把文件写入本地服务器的权限  

// 变量说明:  

// $url 是远程图片的完整URL地址,不能为空。  

// $filename 是可选变量: 如果为空,本地文件名将基于时间和日期  

// 自动生成.  

//表 table 字段id url 

$conn=@ mysql_connect("localhost","root","") or die("连接错误"); 

mysql_select_db(music,$conn); 

mysql_query("set names 'utf8'"); 

$sql="select url from table where id=$_GET[id]"; 

if($_GET[id]>"18622")exit;//表的最大编号 

$query=mysql_query($sql); 

$row=mysql_fetch_array($query); 

$url=$row[url];//这里是图片如http://www.phpzy.com/logo.jpg 

$filename = "img/".basename($url);  //将生成到img文件夹里面 

function GrabImage($url,$filename="") {  

if($url==""):return false;endif;  

if($filename=="") {  

$ext=strrchr($url,".");  

if($ext!=".gif" && $ext!=".jpg"):return false;endif;  

$filename=date("dMYHis").$ext;  

}  

ob_start();  

readfile($url);  

$img = ob_get_contents();  

ob_end_clean();  

$size = strlen($img);  

$fp2=@fopen($filename, "a");  

fwrite($fp2,$img);  

fclose($fp2);  

return $filename;  

}  

$img=GrabImage("$url","$filename");  

if($img):echo '<pre><img src="'.$img.'"></pre>';  

else:echo "false";  

endif;  

$id=$_GET[id]+1; 

echo "<script>setTimeout(\"location.href='img.php?id=$id'\",100)</script>"; 

?> 


http://www.phpzy.com/phpdianxingmokuai/396.html


2010-4-7
表格三要素- 列模型cloumnModel, 数据源, 数据转换store
表格的值获取 -- GridView.js

    column = columns[i];

                meta.id    = column.id;
                meta.css   = i === 0 ? 'x-grid3-cell-first ' : (i == last ? 'x-grid3-cell-last ' : '');
                meta.attr  = meta.cellAttr = '';
                meta.style = column.style;
                meta.value = column.renderer.call(column.scope, record.data[column.name], meta, record, rowIndex, i, store);

renderer参数说明
clolumn.scope ---value单元格的值
cellmeta- 单元格的属性(id和css)
record-







JSON数据格式
  json数据格式 收藏
1. 什么是 JSON

      JSON概念很简单,JSON 是一种轻量级的数据格式,他基于 javascript 语法的子集,即数组和对象表示。由于使用的是 javascript 语法,因此JSON 定义可以包含在javascript 文件中,对其的访问无需通过基于 XML 的语言来额外解析。不过在使用 JSON 之前,很重要的一点是理解 javascript 中数组及对象字面量的特殊语法。

1.1 数组字面量

         数组字面量,是用一对方括号括起一组用逗号隔开的 javascript 值,例如:

        var aNames=["hello", 12, true , null];

1.2 对象字面量

        对象字面量,是通过两个花括号来定义的。在花括号内可以放置任意数量的“名称-值”对,定义格 式字符串值”。除了最后一行外,每个“名称-值”对后必须有一个逗号(这与Perl 中的联合数组的定义有些类似)。例如:

        var oCar = {

               "color": "red",      

              "doors" : 4,

               "paidFor" : true

        };

1.3 混合字面量

      我们可以混用对象和数组字面量,来创建一个对象数组,或一个包含数组的对象。例如:

{comments:[
{
id:1,
author:"someone1",
url:"http://someone1.x2design.net",
content:"hello"
},
{
id:2,
author:"someone2",
url:"http://someone2.x2design.net",
content:"hello"
},
{
id:3,
author:"someone3",
url:"http://someone3.x2design.net",
content:"hello"
}
]};

1.4 JSON 语法

      在Ajax应用中,就是服务器直接生成javascript语句,客户端获取后直接用eval方法来获得这个对象,这样就可以省去解析XML的性能损失。 同时,在javascript 通信中使用JSON作为数据格式的好处很明星,可以立即获得数据的值,因此可以更快的访问其中包含的数据。

      var oCarInfo = eval("(" + sJSON + ")");

请记住:在javascript中花括号也是一个语句。要让解析器知道这个花括号表示的是一个对象而非一个语句的唯一方法是能否找到封装它的圆括号(它是用来说明代码是一个表达式而非一个语句)。

1.5 JSON 编码和解码

       作为 JSON 资源的一部分,Corockford 开发了一个能够实现 JSON 和Javascript 对象直接解码和编码的工具。这个工具的源程序可以在 www.crockford.com/JSON/json.js 中下载。

       在上面提出用到eval() 存在些固有的不足:它是用来对传入的任何 Javascript 代码求值的,而不仅仅针对JSON。因此,当涉及企业级 web 应用程序开发时,它存在很大的安全隐患。为了解决这个问题,可以使用只用来将 JSON 代码转换为 Javascript 的解析器 JSON.parse() 方法来实现。例如:

       var oObject = JSON.parse (sJSON);

       同时,它也提供了一种将 Javascript 对象转换为 JSON 字符串(数据传输时使用的)的工具(在Javascript 中没有内建这种功能支持)。你要做的只是将对象传入到 JSON.Stringify() 方法。请看下面的例子:

       var oCar = new Object();

       oCar.doors = 4;

        oCar.color = "blue";

       oCar.year = 1995;

       oCar.drivers = new Array("Penny", "Dan" , "Kris");

       document.write(JSON.stringify(oCar));

这段代码将输出如下所示的JSON 字符串:

{"doors" : 4, "color" : "blue", "year" :1995, "drivers" : ["Penny", "Dan" , "Kris"]}

2. JSON 与 XML

       正如上面所说,JSON 与 XML 相比的一大优点就是它更加简单。

请看 XML 数据表示实例:

使用XML表示:

<comments>
<comment>
<id>1</id>
<author>someone1</author>
<url>http://someone1.x2design.net</url>
<content>hello</content>
</comment>
<comment>
<id>2</id>
<author>someone2</author>
<url>http://someone2.x2design.net</url>
<content>someone1</content>
</comment>
<comment>
<id>3</id>
<author>someone3</author>
<url>http://someone3.x2design.net</url>
<content>hello</content>
</comment>
</comments>


使用JSON表示:

{comments:[
{
id:1,
author:"someone1",
url:"http://someone1.x2design.net",
content:"hello"
},
{
id:2,
author:"someone2",
url:"http://someone2.x2design.net",
content:"hello"
},
{
id:3,
author:"someone3",
url:"http://someone3.x2design.net",
content:"hello"
}
]};


       很容易发现,许多冗余的信息不见了。由于不需要有与开始标签(opening tag)匹配的结束标签(closing tag),因此传送相同的信息所需的字节数大大降低了。创始人 Corockford 将其称之为“XML 的减肥方案”)。

        JSON 格式的数据与 XML 相比,缺点是对于外行人可读性更差。当然,有一种观点是,数据交换格式不是用肉眼观察的。如果是通过工具对来回传送的数据进行创建和解析,那么的确没有理 由要求数据必须使人们易于阅读。问题的实质在于:存在可用的 JSON 工具。

3. 服务器端 JSON 工具

java :java JSON 工具,由Douglas Crock ford 开发,可在 www.crockford.com/JSON/java/

           中下载,它可以在 JSP 中使用。

4. JSON 优势与缺点

       JSON不仅减少了解析XML解析带来的性能问题和兼容性问题,而且对于javascript来说非常容易使用,可以方便的通过遍历数组以及访问对象属性 来获取数据,其可读性也不错,基本具备了结构化数据的性质。不得不说是一个很好的办法,而且事实上google maps就没有采用XML传递数据,而是采用了JSON方案。

       JSON 另外一个优势是跨域可行性,例如你在www.xxx.com的网页里使用是完全可行的,这就意味着你可以跨域传递信息。而使用XMLHttpRequest却获取不了跨域的信息,这是javascript内部的安全性质所限制的。

       JSON看上去很美,是不是就能完全取代XML呢?事实并非如此,而原因就在于XML的优势:通用性。要使服务器端产生语法合格的javascript代 码并不是很容易做到的,这主要发生在比较庞大的系统,服务器端和客户端有不同的开发人员。它们必须协商对象的格式,这很容易造成错误。

       无论如何,JSON是一个诱人的技术,准备做一个大量的试用。希望届时可以获取大的性能提高
分享到:
评论

相关推荐

    cakephp-cakephp-1.3.8-0-g33afe21

    标题 "cakephp-cakephp-1.3.8-0-g33afe21" 提供的信息表明,这是一个关于 CakePHP 框架的特定版本,版本号为 1.3.8,Git 修订版号是 0-g33afe21。这通常意味着这是一个开源项目,可能是一个源代码库的归档,或者是...

    cakephp-cakephp-2.0.0-dev-0-gbe96338

    "cakephp-cakephp-2.0.0-dev-0-gbe96338" 是CakePHP框架的一个特定版本,它代表了该框架在2.0大版本中的一个开发分支。此版本在官方网站上可获取,确保了其官方支持和更新,为开发者提供了稳定且安全的开发环境。 ...

    cakephp-cakephp-2.0.0-beta-0-g402934f.zip

    标题中的"cakephp-cakephp-2.0.0-beta-0-g402934f.zip"表明这是一个针对CakePHP 2.0.0 beta版本的压缩包,其中可能包含了框架的核心组件、示例代码以及相关的文档资料。 在描述中提到,CakePHP是“借鉴Raid on ...

    cakephp-cakephp-1.3.12-32-gb4e3c8a.zip_cakephp 1.3_cakephp1.3_ca

    本篇将详细探讨 CakePHP 1.3 版本的核心特性和 MVC 模式的应用。 首先,让我们了解什么是MVC模式。Model-View-Controller是软件设计的一种模式,用于分离业务逻辑(Model)、用户界面(View)和控制逻辑...

    cakephp-jwt-auth, 使用JSON网络令牌进行身份验证的CakePHP插件.zip

    cakephp-jwt-auth, 使用JSON网络令牌进行身份验证的CakePHP插件 CakePHP认证插件 包含AuthComponent类认证的插件,用于使用 JSON网络令牌进行身份验证。 你可以在这里详细阅读关于JSON网络令牌规范的详细说明。要求...

    cakephp-2.2.4-0

    cakephp-2.2.4-0 稳定版框架

    cakephp-jwt-auth:一个CakePHP插件,用于使用JSON Web令牌进行身份验证

    composer require admad/cakephp-jwt-auth 用法 使用Cake的控制台加载插件: ./bin/cake plugin load ADmad/JwtAuth 配置: 设置AuthComponent : // In your controller, for e.g. src/Api/AppController.php ...

    cakephp-3-0-1

    CakePHP 3.0.1 发布,此版本是个 bug 修复版本 CakePHP 3.0.0 稳定版是向后不兼容版本,现在 CakePHP 最低要求: PHP 5.4.16 及其以上 mbstring 扩展 intl 扩展

    cakephp-jsonapi:用于在CakePHP 3.x REST API中构建标准化JSON响应的库集

    cakephp-jsonapi 用于在CakePHP 3.x REST API中构建标准化JSON响应的库集为什么? 我需要一种一致的方法来从我的API控制器获取REST响应。 此外,Controller需要执行一些基本的设置步骤才能正确处理JSON请求/响应。 ...

    cakephp3-bootstrap-helpers:Bootstrap 3和4的CakePHP 3.x帮助器

    CakePHP 3.x Bootstrap的帮助器 CakePHP 3.x Helpers以@Twitter Boostrap样式生成HTML:可用的Breadcrumbs , Flash , Form , Html , Modal , Navbar , Panel和Paginator帮助器! 如何... ? 安装 如果您想要...

    CakePHP-Audit-Log-Plugin, 记录在CRUD操作期间对对象所做的更改.zip

    CakePHP-Audit-Log-Plugin, 记录在CRUD操作期间对对象所做的更改 审计日志插件针对的日志插件 2 1. x. 为每个连接的模型创建一个审计历史。行为跟踪两个级别上的更改。 它获取完全水合对象的快照,在更改之后,更改...

    cakephp-open-api-theme-plugin

    composer require kaz29/cakephp-open-api-theme-plugin --dev 相依性 设置 将swagger-settings.php复制到配置目录。 在swagger-settings.php描述应用程序swagger-settings.php 。 将"build:swagger" : "build-...

    cakephp3-soft-delete

    CakePHP的CakeSoftDelete插件 目的 这个Cakephp插件使您可以使您的模型可软删除。 当软删除一个实体时,实际上并没有从数据库中删除它。 而是在记录上设置了deleted时间戳。 要求 该插件是为cakephp 3.x开发的。 ...

    Z-Ray-CakePHP:CakePHP 3.0的Z-Ray扩展

    Z-Ray-CakePHP CakePHP 3.0的Z-Ray扩展。 这将导致在浏览器中显示其他选项卡。 安装 创建一个根据需要命名的目录,并在其中添加此仓库的内容。 示例:(假设Zend Server的默认安装目录) /usr/local/zend/var/...

    wechat-cakephp-sdk:微信-cakephp-sdk

    wechat-cakephp-sdk wechat-cakephp-sdk 在wechat-php-sdk上修改适配cakephp, controller中有使用范例 项目地址: ###更新 Wechat.php中增加适配CakePHP的缓存配置,也可以根据实际情况在WechatCache中改为其他的缓存...

    cakephp2.0-metronic-theme

    cakephp2.0-metronic-theme 如何设置应用程序? 使用以下命令在apache webroot目录中克隆代码。 git 克隆 创建数据库并设置连接 Config/database.php 运行以下命令以使用 composer &gt; composer install 安装 ...

    cakephp-realworld-example-app

    示例CakePHP代码库包含遵循规范和API的真实示例(CRUD,身份验证...cd cakephp-realworld-example-app 使用composer安装所有依赖项 composer install 在config/app.php文件中配置数据库设置(请参阅:数据源/默认) v

    cakephp2.2-habtm-example:一个简单的示例(烘焙),展示了如何保存和验证两个模型之间的HABTM关系

    cakephp2.x-habtm-示例cakephp2.x-habtm-example示例说明如何使用CakePHP 2.x保存和验证两个模型之间的HABTM关系(此代码中使用的版本实际上是2.2) 我们使用两种模型:Post和Tag。 一个帖子与N个标签相关,一个标签...

    cakephp3-user-management

    8. **错误处理与表单验证**:在处理用户输入时,应确保数据的有效性。CakePHP的`FormHelper`和`Validator`类可以帮助我们在客户端和服务器端进行表单验证,显示错误消息。 9. **CRUD操作**:用户管理通常还包括用户...

    CakePHP-1.2-Cheatsheet

    ### CakePHP 1.2 快查表知识点详解 #### 一、自定义查询类型 (CustomFindTypes) 在CakePHP 1.2中,提供了多种自定义查询类型,包括: - **all**: 返回所有匹配记录。 - **first**: 返回第一条匹配记录。 - **...

Global site tag (gtag.js) - Google Analytics