05 2015 档案
摘要:$path = "/home/httpd/html/index.php";$file = basename($path); // $file is set to "index.php"$file = basename($path,".php"); // $file is set to ...
阅读全文
摘要:当请求地址为 localhost/drupal/node/2?name=qinqiu$_SERVER['SCRIPT_NAME'] = /drupal/index.php即代码所在文档的目录和文件名$_SERVER['REQUEST_URI'] = /drupal/node/2?name=qinqi...
阅读全文
摘要:0.5要先定义好.info文件和 .install文件里面的数据表结构.一般都有独立的idserial和其他所需的字段1hook permission这个是为了access arguments设置的方便,对于administrator没有实际的意义2定义menu entry,就是定义a标签的href...
阅读全文
摘要:如果表名太长或者有关键词什么的用什么引号括起来,都需要设置一个别名。---sql一般都是要在类似phpmyadmin的界面 -- 实时看结果,比较容易操作。--设置别名是为了方便引用
阅读全文
摘要://给js传入的时一个对象,不是一个数组,如果传入一个数组是不能运行的,
阅读全文
摘要:有很多的用法 rotatex rotatey rotate/rotatez -- translate() -- 不管是不是绝对定位都可以运用这个属性 且不占空间 和想象的不一样 -- skew和rotateZ的区别就是 skew是文字本身内容本身变成平成平行四边形 rotate就是整个容器沿着z轴转
阅读全文
摘要:white-space 属性设置如何处理元素内的空白。-----------
阅读全文
摘要:http://j-arellano.com/extending-isotope-sorting-data/http://code.tutsplus.com/tutorials/a-simple-parallax-scrolling-technique--net-27641
阅读全文
摘要:和 客户交谈的时候 要不就不说 说也不能直接顶撞 客户的需求要首先考虑如何实现 要多大的成本才可以实现 最后 是在不行 就想出一个建设性的意见 让客户也满意 要试探性的说出变通之道 要想着和客户达成某种妥协 不要想象着和客户对撞 要妥协 但也要保存自己的尊严 ---- 一切为了让客户满意 不管是过去...
阅读全文
摘要:先把文件夹背个份这样就可以还原了后面随便添加 没有关系的。。。。。。
阅读全文
摘要:site email == send email不然可能出现报错--------------------具体的端号 要和具体的邮件提供商沟通不懂就问-就查询资料--相信是可以搞定的。
阅读全文
摘要:VPN就是帮助建立一个新的Ip,从一个新的Ip发出访问。
阅读全文
摘要:中文字体包含英文字母、数字及符号,可以显示英文。但若只是英文字体,自然不可以显示(准确的说是影响中文的渲染)中文的。英文字体文件大小一般不超过100K,多数都是几十K,你看看这个字体,大小如果符合这个特点,它一定不支持中文的。--------------http://zhidao.baidu.com...
阅读全文
摘要:Path Breadcrumbs貌似这个模块还不错哦---------------https://www.drupal.org/project/path_breadcrumbs
阅读全文
摘要:http://tylerfrankenstein.com/code/build-mobile-app-sell-products-with-drupal
阅读全文
摘要:先在本地做测试1, 排除网络的因素2,更新快 节省文件上传的 请缓存的时间 可以做到即时更新3, 环境干净。。。。。
阅读全文
摘要:可能是因为字符在某个字体(font-family)的渲染下变得难看了。所以 千万别急着去制作新的图标 给这个选择器加个字体就很好了 简单方便。
阅读全文
摘要:https://www.drupal.org/node/2342561$element['something'] = array( '#markup' => t('This is some content'), '#theme_wrapper' => 'paragraph_wrapper',);...
阅读全文
摘要:1 当容器大于背景图片时 1.1 当position为20px 30px是,是指图片左上角离外容器的左上角的距离是20px 30px 1.2 当position为10% 10%d的时候,背景图片的10% 10%的这个点 和外容器10% 10%的这个点重合。2 当容器小于背景图片的时还是同样的结果。-...
阅读全文
摘要:大致可以这样解释:最外层的是不会移动的,最外层是不动的。比较靠近里面的不是scroll,如果向左的话,应该是moveleft.不是scrollleft.============== -------div short 第一个short在移动不然移不动。
阅读全文
摘要:$(function() { $('.chart').easyPieChart({ //your options goes here }); });
阅读全文
摘要:http://www.jb51.net/css/6732.html---------------7.3.3行高的计算与继承 以em、ex和百分比为单位的行高,其基数是元素本身的字体尺寸。例如有代码如下: 字高20px,行高2em。 字高30px,行高2em。 2个段落的行高都为2em,但是字体大小不...
阅读全文
摘要:http://www.drawtoclick.com/argosy.office.sekkeistudio.comhttp://utstarcom.office.sekkeistudio.com/msan-overview
阅读全文
摘要:textarea{resize: none;outline: none;}input{outline: none;}--------------------DIV CSS 请注意一个问题 就是 层级的问题 什么层做什么事 一定要注意。。。。。=====层1 层2 层3 本来没有什么区别 功能都能达到...
阅读全文
摘要:①使用Trigger 时会先触发我们绑定的focus 事件,然后文本框会获得焦点,之后触发了浏览器默认的focus事件,所以trigger 会有两次输出。 ②TriggerHandler 相对于 Trigger 只会触发我们绑定的focus,而不会触发浏览器的默认事件.所以只会有一次输出======...
阅读全文
摘要:貌似这两个函数是相对应而存在的,indexof是判断某个字符在字符串里是否存在,charat就是某个字符串中某个数字对应的字符是什么。============================if(input_t.indexOf(option_t) < 0){ input...
阅读全文
摘要:主要区别是两个或者多个数组中如果出现相同键名,键名分为字符串或者数字,需要注意1)键名为数字时,array_merge()不会覆盖掉原来的值,但+合并数组则会把最先出现的值作为最结果返回,而把后面的数组拥有相同键名的那些值“抛弃”掉(不是覆盖) 2)键名为字符时,+仍然把最先出现的值作为最终结果返回...
阅读全文
摘要:常用
阅读全文
摘要:comparison - big problem - so which one to use.
阅读全文
摘要:dpm($data) -- 所有的field字段dpm($row) -- fields in views ui===也会打印到前台页面。。。。。
阅读全文
摘要:人为的加入 vertical tab group === 最外层的包裹vertical tab === vertical tab === 即:外层的包裹 和 内层的包裹
阅读全文
摘要:就是让 contextual filter里的选项的值 == url输入的值 就好了。//这个contextual filter里面能选择的field肯定是base table 或者Joined table里暴露给views模块的。当你在preview里添任何一个值然后views就在生成的sql语句...
阅读全文
摘要:http://api.map.baidu.com/lbsapi/creatmap/index.html---但是进到这个地方,有N多个不同的实例,然后把代码弄弄就好了。代码的原理都一样,但为了不同的显示,用了不同的页面,关键就在于js和一个div地图容器。
阅读全文
摘要:http://map.baidu.com/?newmap=1&ie=utf-8&s=s%26wd%3D%E4%B8%8A%E6%B5%B7%E9%9D%92%E6%B5%A6%E5%8C%BA%E5%BE%90%E9%BE%99%E8%B7%AF77%E5%8F%B7后面加上地址就好了比方说:htt...
阅读全文
摘要:需要imce模块或者insert想必也是极好的--不像以前以为图片只能通过image字段
阅读全文
摘要:函数原型function drupal_process_form($form_id, &$form, &$form_state) {//--}1初始化 $form_state['values']$form_state['values'] = array();2把$form赋值给一个变量,然后生成新的...
阅读全文
摘要:1 account profile :是所有者的信息2filemanager :文件夹管理界面3 system info :相当于php.info4 mail manager :增删改查邮箱账号5mailing list :6 ftp manager :可能是关于ftp的设置吧7 redirect ...
阅读全文
摘要:1 webmail有这样的设置, 邮箱设置”——》“参数设置”,勾选“SMTP发信后保存到【已发送】2,在客户端添加账号的时候选择imap---http://www.icoremail.cn/kehuduanshezhi/20140111/service_info_1235.htmlhttp://w...
阅读全文
摘要:函数原型是这样的function drupal_prepare_form($form_id, &$form, &$form_state) {//---}1初始化一些变量 $form['#type'] = 'form'; $form_state['programmed'] = isset($for...
阅读全文
摘要:函数原型是这样的function drupal_retrieve_form($form_id, &$form_state) {//--}1 把$form_id传到$form_state['build_info']['form_id']$form_state['build_info']['form_i...
阅读全文
摘要:函数原型function drupal_build_form($form_id, &$form_state) {//---}1填充$form_state$form_state += form_state_defaults();2填充$form_state['input'] if (!isset($...
阅读全文
摘要:一般drupal_get_form这个函数是被定义在hook_menu的page callbackfunction hook_menu(){ //....}1跳转到drupal_get_form函数,其原型是这样子的function drupal_get_form($form_id) { //.....
阅读全文
摘要:1, 首先判断网站是正常运行还是处于维护模式 $page_callback_result = _menu_site_is_offline() ? MENU_SITE_OFFLINE : MENU_SITE_ONLINE;2, 获得$_GET['q']的值,并给其他模块改变站点状态留一个接口 $r...
阅读全文
摘要:$items['items'] = array( l('Configure', 'admin/config'), l('Structure', 'admin/structure'),);$theme = theme('item_list', $items);首先会跳转到这个函数func...
阅读全文
摘要:林家小少
阅读全文
摘要:我有时候想啊为什么要用#parent这么看上去貌似不好理解, 为什么要用这样一个单词呢,但就是这样的一个意思, 反映了form数组结构上的一个层次
阅读全文
摘要:function test(array $a,test $b){/*...*/}class test{/*...*/}test(array(),new test); 表示test函数的参数里,第一个参数必须是数组,第二个必须是test类的实体。php没有别的限定类型了,诸如string、intege...
阅读全文
摘要:$view_news = views_embed_view('news', 'block_1');print ( $view_news);news是view machine nameblock_1是display_id,这个值在把鼠标放到display的那个地方,就会有在状态栏出现这个display...
阅读全文
摘要:得出几点结论1,[]在jquery选择器里表示属性-选择2,:not() 后置定语3,()表示 函数参数4,location有好多个属性5,animate({对象在这里}) -- 对象------------------------------------------jQuery(function(...
阅读全文
摘要:1 -- 转化上传文件名中的中文变成拼音之类的2 -- 转化url中的汉字。。。。变成拼音 。。。 很好的哦。
阅读全文
摘要:section一块 article一篇==section:group, chapter, 划分派系 等级不同的大块article: 一段内容 一篇文章 可以用于syndicate / rss两者的区别还是很大的。
阅读全文
摘要:$myId = 5;$result = db_select('table', 't')->fields('t')->condition('id', $myId, '=')->execute()->fetchAssoc();?>the above is equivelent to:SELECT t.*...
阅读全文
摘要:相较而言,var_dump出来的数据信息更多var_export早就应该被淘汰了 可能简单点 资源也许花费的少但格式不怎么样
阅读全文
摘要:而PHP里数组下标是区分大小写的
阅读全文
摘要:学会和眼睛相处相会相处不能和眼睛相处还能和别的东西相处的好吗?-----------闭眼三郎不停的眨眼给他休息
阅读全文
摘要:@keyframes fadein { 0%{ opacity:0; background-color:red; } 40% { background-color:darkblue; } 70% { background-color:gold; } 100% { opacity:1; backg...
阅读全文
摘要:就是描述当前层和背景层之间的关系===scroll:就是图片和背景前面的那个层 一起移动 当页面滚动的时候 全部移动fixed: 就是图片和背景前面的那个层分离 当页面滚动的时候 就是页面被上下滚动的时候 背景图片一动也不动 就在那里---当元素的高度不超过屏幕的时候,scroll和fixed是没有...
阅读全文
摘要:函数表达式就是把函数当成一个值赋给另外一个变量函数声明就是直接调用一个函数-------------------b();var a = function() { alert('a');}function b() { alert('b');}a(); // error--如果a()放在开头则会报错
阅读全文
摘要:function和new Function()的区别var a = function (){alert(1)}var b = new Function('alert(1)');//大写Fnew Function()与new Array()相似,都是用javascript自带的功能返回一个functi...
阅读全文
摘要:--貌似直接就是lastindexof'a'就是a字符出现的最后的索引 ---------------就是stringObject.lastIndexOf('aaa')就是返回aaa在stringObject中(从后面往前推)所在的索引号码从0开始计数的。如果在stringObject找不到aaa那...
阅读全文
摘要:stringObject.substring(start,stop) substring() 方法用于提取字符串中介于两个指定下标之间的字符。stringObject.substr(start,length) 必需。要抽取的子串的起始下标。必须是数值。如果是负数,那么该参数声明从字符串的尾部开始算起...
阅读全文
摘要:http://api.map.baidu.com/lbsapi/creatmap/index.html
阅读全文
摘要:post使用form-data和x-www-form-urlencoded的本质区 就是数据格式的处理不同 application/x-www-form-urlencoded 1、它是post的默认格式,使用js中URLencode转码方法。包括将name、value中的空格替换为加号;将非asci
阅读全文
摘要:把站激活让他热起来也利于生成缓存加快后面的访问速度也许有帮助
阅读全文
摘要:数组for(var i=0,i>array.length,i++){}对象for(var i in object){console.log(object[i])或者 console.log(object.i)//具体不清楚}echo json_encode($errors, JSON_FORCE_O...
阅读全文
摘要:var color = $("h1").css("color");alert(color);-----------------Ticket Price:-----------------h1{color:red;}===============实际上h1的颜色值是可以取出来的。那就说明jquery的...
阅读全文
摘要:当js代码没有效果那就要看看firebug有没有提示但firebug貌似默认是没有激活的因为不明说他是不会干活的---那怎么办就要激活firebug控制台会有所提示的
阅读全文
摘要:group by有两个功能:1,只出一个结果,group by id可以每个Id出现一次。2,出现很多重复的结果,group by可以把结果集合拢。----select max(xxx) from table group by -----=== 当有min max count的时候 比较正常的用法是...
阅读全文
摘要:如果表名太长或者有关键词什么的用什么引号括起来,都需要设置一个别名。---sql一般都是要在类似phpmyadmin的界面 -- 实时看结果,比较容易操作。
阅读全文
摘要:当需要搜索出max()之后的语句,就需要直接把select max() from .....做成一个类似临时表的形式,子查询。而不是直接把两个表或者几个表join起来。。。。
阅读全文
摘要:一样的
阅读全文
摘要:即使你认为自己已对 MySQL 的 LEFT JOIN 理解深刻,但我敢打赌,这篇文章肯定能让你学会点东西!ON 子句与 WHERE 子句的不同一种更好地理解带有 WHERE ... IS NULL 子句的复杂匹配条件的简单方法 Matching-Conditions 与 Where-conditi...
阅读全文
摘要:下面进一步-----------------在比如在一个array里面就不能出现$a = array()而是 $a => array()其意义是差不多的。很类似。---下标还有时候可以作为命名空间---
阅读全文
摘要:$a = false;$b = 0;$c = null;==== empty yes$a = false;$b = 0;==== isset yes$c = null;=== isset NO
阅读全文
摘要:////// 以第一个数组为准,比较两个数组的不同之处。array_diff (arr1, arr2)=== 返回一个只出现在arr1但没有出现在arr2中的数据标准是值不是键array_diff_key(arr1, arr2)=== 返回一个只出现在arr1但没有出现在arr2中的数据标准是键不是...
阅读全文
摘要:array_intersect(arr1, arr2)===哪些脚踏了两条船返回一个数组,该数组包含了所有在array1 中也同时出现在所有其它参数数组中的值。注意键名保留不变。===以值为准不以键为准 (一般来说是以值为准的而不是键), 值符合的情况下,以第一个数组的下标为准。---貌似和arra...
阅读全文
摘要:一个表a的主键也出现在表b中,那么表b中的这个键就是表b的外键表a是主表表b是从表===在一个表中,指向外面表主键的字段称之为这个表的外键,指向外面的主键的键就是外键。
阅读全文
摘要:$a = new stdClass; var_dump($a);$a = new stdClass(); var_dump($a);===========object(stdClass)#1 (0) {}object(stdClass)#2 (0) {}====可以看到基本没有区别。只是编号有点区别...
阅读全文
摘要:slide从右侧向左滑入页面slideup 从底部向上滑入slidedown 从上向下滑入pop 从中心渐显展开fade 渐显flip 翻转==========page 页面容器,其内部的mobile元素将会继承这个容器上所设置的属性 header 页面标题容器,这个容器内部可以包含文字、返回按钮、...
阅读全文
摘要:while($info = mysql_fetch_assoc($result)){var_dump('one time');}====每次只取出一行数据,一共打印出了n次,有多少行数据就打印出多少次。
阅读全文
摘要:1,在网站内部搜索,搜索的范围本身就包括:html源代码,js源代码,css源代码,在firebug的脚本下可以看到源文件名和路径,等等信息。2,到外部搜索,baidu gfsoso yahoo.....etc.变化抓全关键字。。。。
阅读全文
摘要:貌似说 一个对象没有方法处理数据, 一个方法没有对象数据,这样可以两者臭味相投,就好了。----一个函数借助另外一个对象的属性通过自己的方法,从而达到某种改变或者输出数据的目的。2015-5-4 --就是一个函数.call(对象a) 对象a的属性会被运动到这个函数中,自然会输出某个值或者改变点什么东...
阅读全文
摘要:因为这个中划线有可能会被解析为减号。。。
阅读全文
摘要:JS函数不仅仅是一个函数, 因为其数据结构的独特性, 函数可以属性函数或者一个类-------------函数:--- 一个属性--- 一个函数--- 一个类=================================draw: function(obj, time) {}draw是一个对象的...
阅读全文
摘要:1, smtp服务器发出邮件的地址2,发出邮件地址和网站邮件地址最好匹配以免系统不认识。3,还有一点,当选择了quee之后呢,服务器不会立刻马上把邮件发出去,他会等待cron的运行,然后一起发出去,这样比较高效。4, 163企业邮箱的端口是25
阅读全文
摘要:================video#bgvid {position: fixed; right: 0; bottom: 0;min-width: 100%; min-height: 100%;width: auto; height: auto; z-index: -100;backgroun...
阅读全文
摘要:不用担心表达式内部嵌套比较多这一说。因为系统解析器就是从重到轻执行的。主要在规则范围内,就是可以轻松执行的,相对的把代码写入到一行,可以提高执行和阅读的顺序。
阅读全文
摘要:1,主动规划 给drupal提供一个大的配置数组数据 2,给变量赋默认值免得遗漏3,起一个验证的功能4,cache也很方便的
阅读全文
摘要:http://www.cnblogs.com/thinksasa/p/3334492.html---------------
阅读全文
摘要:function add($a, $b, $c){ return $a + $b + $c;}var_dump(add(2, 3));----调用函数的时候,参数多,没关系。参数少,warning。
阅读全文
摘要:我们可以尝试着把div开成一个表格的td..-----------------------为什么浮动后面的元素会跟着浮动呢,因为浮动的元素浮向某一边了,浮动的div脱离文档流, 然后空出来的空间不能白白浪费啊。于是默认就跟着‘被浮动’了,但也可以设置成不跟着‘浮动’---1,浮动的元素变成块状(in...
阅读全文
摘要:QUERY --变量http://localhost/index.php?a=b&q=cc&desti=abc-------------array(3) {["a"]=> string(1) "b" ["q"]=> string(2) "cc" ["desti"]=> string(3) "abc"...
阅读全文
摘要:1,不要使用中文目录名,不然解析可能会有问题2把Phpstudy文件夹全部改成可以读写---即有可能是权限不够加大之
阅读全文
摘要:有人要求说 发出去的邮件要翻译 中文下看到的是中文的内容于是,admin/user/account这个地方。。。。。可以翻译邮件的。
阅读全文
摘要:关闭注册功能。或者开通邮件确认功能。---也有可能是文件权限太大?或者密码太容易破解了? capture recapture honeypot
阅读全文
摘要:改用chrome试试。因为如果firefox加载不完成的话,css就不显示出来,但chrome是可以的。---加载机制不一样。在或者用ie试下各个浏览器不一样为什么不试试呢或许就可以。。。。
阅读全文
摘要:dedecms 里强制限制了register_globals由于register_globals设置控制PHP变量访问范围,如果开启会引起不必要的安全问题,所以这里对其进行了强制关闭,如果站长的空间不支持,可以采用以下几种办法进行修改,供广大站长参考:*如果是独立服务器的用户可以修改php配置文件中...
阅读全文
摘要:可以在$GLOBALS中获得所有的变量$GLOBALS天然就是一个有很多内容的变量 $_SERVER========$jackson = "Example content";$_GET['A'] = 'A';$_GET['B'] = 'B';===于是乎就有了 $GLOBALS['A']$GLOBA...
阅读全文
摘要:1, array_merge出来的数组,和以前的数组没有关系,会生成一个新的数组,返回值。2, 数组的下标是分大小写的========$_GET['A'] = 'A';$_GET['a'] = 'a';$_POST['C'] = 'C';$_POST['c'] = 'c';$arr = array_...
阅读全文
摘要:1, xdebugstep into2,假设某个值是多少,然后带入到代码中,然后可以起到简化运算的效果,大致模拟出效果----
阅读全文
摘要:define('JACKSON',false);$a = defined('JACKSON');var_dump($a);===TRUE-----------------------不管定义了true还是false,只要定义了就是true,好的。
阅读全文
摘要:当一个'字符串'数据表达不了的时候,就会要用到数组,然后数组就可以用循环的方式来弄,foreach for---即所谓下面更多when in doubt, use brutal force,when complicate, use signal mind to do it one by one, b...
阅读全文
摘要:说实话不知道为什么会有不同的编码---$a = urlencode('http://example.com/foo?a=b');==== http%3A%2F%2Fexample.com%2Ffoo%3Fa%3Db其中空格是+号$url = url('node/34',array('query'=>...
阅读全文
摘要:如果是其他网站维护人员不懂文件名不可以用中文或者空格结果就悲剧了但这个模块就可以预防和解决这个问题。
阅读全文
摘要:这样就会访问到Node/2这个页面如果我们访问 xxx/index.php?q=node/1&destination=ben那就会有 destination => ben ====>drupal_get_destination()-------------------------
阅读全文
摘要:1, 压缩css js就一个cssjs文件好了2,背景图片sprite(logo图也做成背景图的方式)3,据说还有op code ?4,去掉不必要的模块
阅读全文
摘要:理论上应该是这样子的,但是不知道什么时候某一个元素--特别是第一个或者最后一个元素-不知道在什么时候被设置了16.5,请问这样的设置之后,显然就不是100-20的关系了。。。血泪的教训啊。。。。---在99.9%的情况下都可以通过查看细节获得问题的答案.
阅读全文
摘要:也不是天塌下来的事可以用firebug工具测试和验证值是一定可以取出来的=======http://www.cnblogs.com/luluping/archive/2009/06/04/1496029.html-------------------如果 列表里面 有N多的列表项目 我想知道我点击了...
阅读全文
摘要:看到以前做的地方,都感觉有的有的地方做的还是不错的--结论就是项目这个东西退缩就没有做的机会不要以为自己做不了慢慢做就做出来了 并且要相信自己能做出来然后还要不断的总结和检讨.如果不做就不知道自己是不是做的了在项目难点或者不是难点的面前,要乐观的坚信可以做就算不会做可以问百度问gfsoso问群里的朋...
阅读全文
摘要:$base_path - /drupal/$base_url - http://localhost/drupal$path_root - http://localhost==请体会命名的内在考虑
阅读全文
摘要:判断是否为array,如果是array,把print变成false,然后交给drupal_render,如果是字符串,直接返回。
阅读全文
摘要:这样子的话,方便其他人上传,方便以后上传合适尺寸的图片,方便网站维护。。。。---也方便自己知道什么地方上传什么尺寸的图
阅读全文
摘要:1,从简单的地方看,从要用得到的地方看,先易后难。2,一点一点的慢慢看,尝试理解,3,还可以简化式测试部分代码。----a 把某个函数放到index.php然后单步进入,看是怎么弄的,一点一点的弄.b 先易后难先大概后深入先全貌后细节
阅读全文
摘要:a 有一个 rel 属性, 据说是给链接分类的, 如果没有分好类, 就可以先不用这个属性。 image 标签的 alt 属性比较有用, title 属性其实没有啥用, 可以起到解释性作用, 但没啥用。 链接要一直有效, 不能是 href="#abc'这样会判断出这个链接不能crawler 以下文字作
阅读全文
摘要:1,精准包含2,同义词包含3,词序颠倒4,词的中间插入其他元素5,词的前后有附加的元素--核心包含就是包含词语的核心,
阅读全文
摘要:1, page callback函数会调用一个表单id的函数,外围转备好后,就进入到数组函数生成之中去,2,激活field attach form会把这个entity type和 bundle下的field instance的数组取出来,3,然后就组合成数组,然后就被渲染了
阅读全文