- 浏览: 13730124 次
- 性别:
- 来自: 洛杉矶
文章分类
- 全部博客 (1994)
- Php / Pear / Mysql / Node.js (378)
- Javascript /Jquery / Bootstrap / Web (435)
- Phone / IOS / Objective-C / Swift (137)
- Ubuntu / Mac / Github / Aptana / Nginx / Shell / Linux (335)
- Perl / Koha / Ruby / Markdown (8)
- Java / Jsp (12)
- Python 2 / Wxpython (25)
- Codeigniter / CakePHP (32)
- Div / Css / XML / HTML5 (179)
- WP / Joomla! / Magento / Shopify / Drupal / Moodle / Zimbra (275)
- Apache / VPN / Software (31)
- AS3.0/2.0 / Flex / Flash (45)
- Smarty (6)
- SEO (24)
- Google / Facebook / Pinterest / SNS (80)
- Tools (22)
最新评论
-
1455975567:
xuezhongyu01 写道wocan23 写道我想问下那个 ...
Mysql: LBS实现查找附近的人 (两经纬度之间的距离) -
xuezhongyu01:
wocan23 写道我想问下那个111.1是怎么得来的我也看不 ...
Mysql: LBS实现查找附近的人 (两经纬度之间的距离) -
18335864773:
试试 pageoffice 在线打开 PDF 文件吧. pag ...
jquery在线预览PDF文件,打开PDF文件 -
青春依旧:
opacity: 0.5; 个人喜欢这种方式!关于其他css特 ...
css透明度的设置 (兼容所有浏览器) -
July01:
推荐用StratoIO打印控件,浏览器和系统的兼容性都很好,而 ...
搞定网页打印自动分页问题
This Simplexml class provides an alternative implementation of the SimpleXML API that works under PHP 4, so if you have an application that is running under PHP4 environment this is really helpful for you.
The original class was created by Taha Paksu of http://www.phpclasses.org and it was modified by Chris Brainard so that it would work with codeigniter.
Lets take a look at the code.
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Simplexml{ var $result = array(); var $ignore_level = 0; var $skip_empty_values = false; var $php_errormsg; var $evalCode=""; function xml_parse($data){ $php_errormsg=""; $this->result=""; $this->evalCode=""; $values=""; $encoding = 'UTF-8'; $parser = xml_parser_create($encoding); xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0); xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1); $ok = xml_parse_into_struct($parser, $data, $values); if (!$ok) { $errmsg = sprintf("XML parse error %d '%s' at line %d, column %d (byte index %d)", xml_get_error_code($parser), xml_error_string(xml_get_error_code($parser)), xml_get_current_line_number($parser), xml_get_current_column_number($parser), xml_get_current_byte_index($parser)); } xml_parser_free($parser); return $this->xml_reorganize($values); } function xml_reorganize($array) { $count = count($array); $repeat = $this->xml_tags($array); $repeatedone = false; $tags = array(); $k = 0; for ($i = 0; $i < $count; $i++) { switch ($array[$i]['type']) { case 'open': array_push($tags, $array[$i]['tag']); if ($i > 0 && ($array[$i]['tag'] == $array[$i-1]['tag']) && ($array[$i-1]['type'] == 'close')) $k++; if (isset($array[$i]['value']) && ($array[$i]['value'] || !$this->skip_empty_values)) { array_push($tags, '@content'); $this->array_insert(count($tags), $tags, $array[$i]['value'], "open"); array_pop($tags); } if (in_array($array[$i]['tag'] . $array[$i]['level'], $repeat)) { if (($repeatedone == $array[$i]['tag'] . $array[$i]['level']) && ($repeatedone)) { array_push($tags, strval($k++)); } else { $repeatedone = $array[$i]['tag'] . $array[$i]['level']; array_push($tags, strval($k)); } } if (isset($array[$i]['attributes']) && $array[$i]['attributes'] && $array[$i]['level'] != $this->ignore_level) { array_push($tags, '@attributes'); foreach ($array[$i]['attributes'] as $attrkey => $attr) { array_push($tags, $attrkey); $this->array_insert(count($tags), $tags, $attr, "open"); array_pop($tags); } array_pop($tags); } break; case 'close': array_pop($tags); if (in_array($array[$i]['tag'] . $array[$i]['level'], $repeat)) { if ($repeatedone == $array[$i]['tag'] . $array[$i]['level']) { array_pop($tags); } else { $repeatedone = $array[$i + 1]['tag'] . $array[$i + 1]['level']; array_pop($tags); } } break; case 'complete': array_push($tags, $array[$i]['tag']); if (in_array($array[$i]['tag'] . $array[$i]['level'], $repeat)) { if ($repeatedone == $array[$i]['tag'] . $array[$i]['level'] && $repeatedone) { array_push($tags, strval($k)); } else { $repeatedone = $array[$i]['tag'] . $array[$i]['level']; array_push($tags, strval($k)); } } if (isset($array[$i]['value']) && ($array[$i]['value'] || !$this->skip_empty_values)) { if (isset($array[$i]['attributes']) && $array[$i]['attributes']) { array_push($tags, '@content'); $this->array_insert(count($tags), $tags, $array[$i]['value'], "complete"); array_pop($tags); } else { $this->array_insert(count($tags), $tags, $array[$i]['value'], "complete"); } } if (isset($array[$i]['attributes']) && $array[$i]['attributes']) { array_push($tags, '@attributes'); foreach ($array[$i]['attributes'] as $attrkey => $attr) { array_push($tags, $attrkey); $this->array_insert(count($tags), $tags, $attr, "complete"); array_pop($tags); } array_pop($tags); } if (in_array($array[$i]['tag'] . $array[$i]['level'], $repeat)) { array_pop($tags); $k++; } array_pop($tags); break; } } eval($this->evalCode); $last = $this->array_reindex($this->result); return $last; } function array_insert($level, $tags, $value, $type) { $temp = ''; for ($c = $this->ignore_level + 1; $c < $level + 1; $c++) { if (isset($tags[$c]) && (is_numeric(trim($tags[$c])) || trim($tags[$c]))) { if (is_numeric($tags[$c])) { $temp .= '[' . $tags[$c] . ']'; } else { $temp .= '["' . $tags[$c] . '"]'; } } } $this->evalCode .= '$this->result' . $temp . "=\"" . addslashes($value) . "\";//(" . $type . ")\n"; #echo $code. "\n"; } /** * Define the repeated tags in XML file so we can set an index * * @param array $array * @return array */ function xml_tags($array) { $repeats_temp = array(); $repeats_count = array(); $repeats = array(); if (is_array($array)) { $n = count($array) - 1; for ($i = 0; $i < $n; $i++) { $idn = $array[$i]['tag'].$array[$i]['level']; if(in_array($idn,$repeats_temp)){ $repeats_count[array_search($idn,$repeats_temp)]+=1; }else{ array_push($repeats_temp,$idn); $repeats_count[array_search($idn,$repeats_temp)]=1; } } } $n = count($repeats_count); for($i=0;$i<$n;$i++){ if($repeats_count[$i]>1){ array_push($repeats,$repeats_temp[$i]); } } unset($repeats_temp); unset($repeats_count); return array_unique($repeats); } /** * Converts Array Variable to Object Variable * * @param array $arg_array * @return $tmp */ function array2object ($arg_array) { if (is_array($arg_array)) { $keys = array_keys($arg_array); if(!is_numeric($keys[0])) $tmp = new Xml; foreach ($keys as $key) { if (is_numeric($key)) $has_number = true; if (is_string($key)) $has_string = true; } if (isset($has_number) and !isset($has_string)) { foreach ($arg_array as $key => $value) { $tmp[] = $this->array2object($value); } } elseif (isset($has_string)) { foreach ($arg_array as $key => $value) { if (is_string($key)) $tmp->$key = $this->array2object($value); } } } elseif (is_object($arg_array)) { foreach ($arg_array as $key => $value) { if (is_array($value) or is_object($value)) $tmp->$key = $this->array2object($value); else $tmp->$key = $value; } } else { $tmp = $arg_array; } return $tmp; //return the object } /** * Reindexes the whole array with ascending numbers * * @param array $array * @return array */ function array_reindex($array) { if (is_array($array)) { if(count($array) == 1 && $array[0]){ return $this->array_reindex($array[0]); }else{ foreach($array as $keys => $items) { if (is_array($items)) { if (is_numeric($keys)) { $array[$keys] = $this->array_reindex($items); } else { $array[$keys] = $this->array_reindex(array_merge(array(), $items)); } } } } } return $array; } }
In this article we don’t need to understand what is in the code above. What is my aim is to show you how to use it.
Supposing you have an xml format like below, and you need it to present as a tabular data in an html page.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <products xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <item> <id>1</id> <name>iPhone</name> <category>Mobile</category> <price>300</price> </item> <item> <id>2</id> <name>iMac</name> <category>Desktop Computers</category> <price>2500</price> </item> <item> <id>3</id> <name>MacBook Pro</name> <category>Mobile PC</category> <price>2000</price> </item> <item> <id>4</id> <name>iTouch</name> <category>Gadgets</category> <price>150</price> </item> <item> <id>5</id> <name>Wii</name> <category>Gaming</category> <price>1250</price> </item> <item> <id>6</id> <name>Time Capsule</name> <category>Acessories</category> <price>1000</price> </item> <item> <id>7</id> <name>Apple TV</name> <category>Gadgets</category> <price>800</price> </item> </products>
Lets start by creating our controller, to make it easier lets make use of the default controller in fresh CI installation which is the welcome controller. Now open you welcome controller and in you index function populate the code below.
function index() { //load the parser library $this->load->library('parser'); $data['title'] = 'Parsing XML using Simplexml class of CodeIgniter'; $data['products'] = $this->_getXML('myxml'); $this->parser->parse('table_view', $data); }
In this function we load the parser library, for those who dont know
what a parser library is, its a simple templating engine of
codeIgniter. Im using this almost always for me to get rid if the php
tag in my view. Next we have a varialble title
, and a variable products
which calls the _getXML
function with a string parameter myxml
, we use this as reference of the filename for our XML file to be parse. Then load our table_view
.
Lets add the _getXML
function to our controller. Add this code in your welcome controller.
function _getXML($fname) { $filename = $fname.'.xml'; $xmlfile="./xml/".$filename; $xmlRaw = file_get_contents($xmlfile); $this->load->library('simplexml'); $xmlData = $this->simplexml->xml_parse($xmlRaw); foreach($xmlData['item'] as $row) { $result .= '<tr>'; $result .= '<td>'.$row['id'].'</td>'; $result .= '<td>'.$row['name'].'</td>'; $result .= '<td>'.$row['category'].'</td>'; $result .= '<td>$ '.$row['price'].'</td>'; $result .= '</tr>'; } return $result; }
This assume that the file location of your xml file is in the root of your CI installation an inside the xml
folder. Then using the file_get_contents()
function we load the xml data to $xmlRaw
varialble. We loaded the simple XML library and then we populate it to the table element using foreach()
function.
Now you only need to add a very little code in your view file.
<table cellpadding="0" cellspacing="0"> <thead> <th> <td>PRODUCT ID</td> <td>PRODUCT NAME</td> <td>CATEGORY</td> <td>PRICE</td> </th> </thead> <tbody> {products} </tbody> </table>
Thats it!. Adding some quick css styling and a jQuery for table row stripe effect. You get something like this.
Adding a quick table stripe effect.
Download and include the jQuery library file in your view.
<script type="text/javascript" src="public/js/jquery.js"></script>
Then add this line before the tag in your view file.
<script type="text/javascript"> $(document).ready(function(){ $("table tr:nth-child(even)").addClass("even"); }); </script>
And you must have a style like this in your css file.
table tr.even td{ background: #cdded6; }
Were done. Thanks for reading.
发表评论
-
CakePHP你必须知道的21条技巧
2012-10-19 06:25 1882原文链接:http://www.avatarfinancial ... -
cakephp 1.3 Views
2012-10-09 06:12 1442Section 1 Views 视图 一个vie ... -
cakephp 1.3 Models
2012-10-09 06:07 2501Section 1 What is a model? ... -
cakephp 1.3 Controller
2012-10-09 05:49 3333Controller 一个controller用于管理 ... -
cakephp 1.3 配置CakePHP
2012-10-09 05:31 4644Section 1 数据库配置 app/config/ ... -
CakePHP 2.x十分钟博客教程
2012-10-07 01:27 244121. CakePHP2十分钟博客教 ... -
Create an Admin panel with CodeIgniter
2010-05-23 02:15 4175Create an Admin panel with Code ... -
Codeigniter Grid 使用方法 (flexigrid)
2010-05-23 02:05 2803来源:http://codeigniter.com/forum ... -
CI集成 ckeditor 配置
2010-05-23 01:34 3752配置 ckeditor 1.上传 下载 ckedito ... -
codeigniter 辅助函数 - 敏感词过滤
2010-05-05 06:18 4573我们都知道有些敏感的词汇是不适合出现在互联网上的,特别是在有用 ... -
实现简单 codeigniter 缓存 (cache)
2010-04-30 23:47 5277代码 class Test extends Contr ... -
CKEditor Helper for CodeIgniter
2010-04-19 00:37 3974Using CKEditor as a plugin in y ... -
codeigniter 生成 excel
2010-04-19 00:33 3321Excel Plugin Th ... -
CakePHP 中文手册
2010-04-14 21:04 2335基本概念 Section1 简介 ... -
利用 Cache_Lite代替codeigniter中的cache功能
2010-01-29 06:15 5508codeigniter的功能纵然强大,也有不足之处。其cach ... -
CodeIgniter 操作PDF ( Generating PDF files using CodeIgniter )
2010-01-03 04:03 3607PDF files rock! Some of the p ... -
CodeIgniter 合作 Authorize.net
2009-12-30 00:25 1611function payment(){ // 略... ... -
CodeIgniter 合作paypal
2009-12-30 00:15 2349<?php class Paypal extend ... -
CodeIgniter 操作 CSV
2009-12-29 07:17 4631A Comma separated values (CSV) ... -
codeigniter 操作 Rss
2009-12-29 07:12 1969I wrote a codeigniter library t ...
相关推荐
在“CodeIgniter操作Rss”这个主题中,我们将深入探讨如何在CodeIgniter框架中处理RSS(Really Simple Syndication) feeds,这是一种广泛使用的格式,用于发布和订阅新闻、博客文章和其他定期更新的内容。...
库是CodeIgniter中的核心组件,如数据库连接、邮件发送、XML-RPC等。它们扩展了框架的功能,允许开发者访问更高级的操作。 9. **配置(Configuration)** CodeIgniter允许开发者通过配置文件来定制框架的行为,如...
5. **创建WSDL文件**:WSDL文件是SOAP服务的重要组成部分,它定义了服务的接口、操作和数据类型。可以手动创建,或者使用工具自动生成。在CodeIgniter中,你可能需要使用第三方库如wsdl2phpgenerator来生成PHP代码,...
CodeIgniter的类库如FTP、Email和XML-RPC,方便开发者实现与外部服务的通信。 8. **测试与性能分析**:CodeIgniter提供了单元测试、基准测试和分析器,帮助开发者确保代码质量,同时找出性能瓶颈。 9. **辅助函数*...
通过学习这个CodeIgniter的使用例程,你可以深入了解如何使用这个框架来构建一个简单的网站跳转管理系统,并从中学习到如何整合MVC模式、数据库操作、AJAX交互以及CodeIgniter的其他核心特性。实践这样的项目有助于...
它通过AJAX技术动态加载数据,使得用户可以在不刷新页面的情况下操作数据。 2. **配置选项**:`jqGrid`有许多可配置的选项,例如表格列的定义、数据来源、分页设置、排序规则等。这些选项可以通过JavaScript代码来...
你可以像下面这样访问和操作XML数据: ```php $xml_content = '<books>...</books>'; // 假设这是你的XML字符串 $manipulateXML = new CI_ManipulateXML($xml_content); $xmlobject = $manipulateXML->ConvertXML()...
CodeIgniter使用Active Record模式来处理数据库操作,使得编写SQL查询更加简洁和安全。 4. `assets`:通常存放Web应用的静态资源,如CSS样式表、JavaScript文件、图片等。在本案例中,jQuery库可能位于此目录下的JS...
CodeIgniter的安装过程非常简单,只需要按照以下步骤操作: 1. 从官方网站下载最新版本的CodeIgniter。 2. 解压缩下载的文件夹。 3. 将所有文件和文件夹上传到服务器。 4. 通过浏览器访问服务器的URL(例如***)...
在CodeIgniter中,可以使用其内置的数据库类与MySQL进行交互,执行CRUD(创建、读取、更新、删除)操作。 在“ecommerce-codeigniter-main”这个压缩包中,我们预期会找到该项目的所有源代码文件,包括控制器、模型...
Codeigniter教程将介绍其核心架构、数据库操作、安全实践以及错误处理。 这些教程对于希望全面了解和掌握这些技术的开发者来说是宝贵的资源。通过学习,你可以提升自己的技能,更好地适应和解决实际项目中的问题。...
CodeIgniter可以通过扩展或第三方库轻松实现RESTful API的开发,支持JSON、XML等多种数据格式,便于构建面向服务的架构。 总的来说,CodeIgniter是一个功能齐全且易于学习的PHP框架,通过理解和掌握上述知识点,...
实施SEO最佳实践,如设置元标签、URL重写、生成XML站点地图等,以提高搜索引擎的可见性。 **15. 测试和部署** 进行全面的功能测试,确保所有功能正常运行。然后将项目上传到生产服务器,配置好服务器环境,如...
"网上药房商店Codeigniter"项目显然利用了这个框架来开发一个在线药店平台,允许用户购买药品、查询药品信息以及进行订单管理等操作。 在深入探讨这个项目之前,我们首先了解一下CodeIgniter的关键特性: 1. **MVC...
4. **数据库操作**:CodeIgniter的Active Record库提供了方便的数据库操作,如查询构造、插入、更新和删除记录,支持多种数据库系统。 5. **安全与防护**:包括输入验证、XSS过滤、防止SQL注入等,保障应用的安全性...
在CodeIgniter中实现RESTful服务,可以提高系统的可扩展性和互操作性,便于移动端或第三方服务与之交互。 【标签】"HTML"表明此项目可能涉及到前端页面的开发,HTML(HyperText Markup Language)是用于创建网页的...
最后,CodeIgniter框架还拥有许多其他优秀的特性,比如路由系统的配置、数据库操作、安全性控制等,这些都需要开发者在实践中不断学习和掌握。为了深入理解CodeIgniter框架的更多内容,读者可以查阅相关的教程和文档...
在“propinsi-codeigniter”项目中,我们看到的是如何利用AJAX和jQuery技术来动态地展示印度尼西亚的区域数据,包括省份、区、街道和村庄的信息。这个例子展示了Web开发中的前后端交互,使得用户无需刷新页面就能...