走进Zend Framework框架编程(六):视图(1) 【转】

本部分内容包括:视图,模板,视图帮助类等。

6.0视图介绍 在Zendframework的MVC编程模型中,视图(View)是在控制器的控制和指挥下,用来对程序逻辑进行呈现(Render)的。呈现的结果,就是我们在浏览器里看到的文字、图片、表单等各种网页元素及其字体、颜色、样式等各种效果。 Zend_View Class就是负责视图工作的类,它有效地完成了视图与程序逻辑的分离。它提供了视图帮助、输出过滤和变量转义等功能。 Zend_View还是一个模板系统,我们可以用PHP作为我们的模板语言。当然ZF还可以在View脚本里使用其他第三方的模板系统,比如PHPLib和Smarty等。 使用Zend_View时主要分两步,首先声明一个Zend_View实例,把变量等赋给它,然后使用控制脚本,根据视图脚本呈现出结果。

例如:

控制脚本(在控制器文件的action里,例如IndexController.php中的函数dispdataAction()): …… Function dispdataAction() { …… $data = 'to view'; //数据变量 Zend_Loader::loadClass('Zend_View'); $view = new Zend_View(); //实例化 $view->books = $data;  //赋值 echo $view->render('view.php'); }

视图脚本转义输出语句(在视图脚本文件里,本例是view.php): <? php echo $this->escape($this->data ?>

6.1引导文件中setParam('noViewRenderer', <bool>)语句的再解释 Index文件中$fc->setParam('noViewRenderer', <bool>);语句和视图的某性特性有很大关系,比如视图存放的路径等一些默认属性都受该开关属性的影响。 false 是noViewRenderer的默认值。也就是说,如果没有该语句,则认为noViewRenderer参数被设置为false。 noViewRenderer参数被设置为false:意味着控制器使用ZF默认的视图特性,比如视图文件默认必须存放于views/script/<action>/文件夹下,视图文件必须存在,而且其名字必须为<action>.phtml。.phtml是ZF使用的PHP脚本文件,和普通PHP文件没有本质区别。同时,视图对象默认被实例化为$view变量,在控制脚本中使用$view的形式为:$this->view->…。 noViewRenderer参数被设置为true:意味着控制器不使用ZF默认的视图特性,而是通过显式的实例化Zend_view对象,通过我们自己的代码来设置视图对象的属性和方法。本部分“视图介绍”中就是显式声明和使用视图对象的例子。为了程序的灵活性和可控行,我们自然建议把noViewRenderer 设置为 true,这也是比较通常的做法。

6.2视图对象的Options 视图对象的Options选项进一步规定了视图脚本呈现过程中的一些细节。这些选项可以通过在声明视图对象时指定,在构造函数里设置,也可以通过set……()方法来指定。 —basePath基本路径 设置方法:setBasePath(), addBasePath() 例如目录结构: base/path/       helpers/       filters/       scripts/      用$view->setBasePath(”base/ path/”);语句设置基本路径后,在没有$view->setScriptPath('……');语句直接指定脚本路径时,就会自动在base/path/scripts/下搜索视图脚本文件,如果使用了视图助手和过滤器,就会分别自动在helpers/和 filters/文件夹下搜索。

—encoding字符编码 用来在使用htmlentities()、htmlspecialchars()或其他操作时,指定字符编码。 设置方法:setEncoding() 默认编码是ISO-8859-1 (latin1)。

—escape回调函数 用于在视图呈现时调用该函数。后边有示例。 设置方法:setEscape()

—filter过滤器 用于在视图呈现后调用过滤方法。 设置方法:setFilter(), addFilter(),

—strictVars 当视图视图发送一个未初始化的变量时,用该选项指定ZF收购给出一个提示或警告信息: Notice: Key "xxx" does not exist …… 设置方法:strictVars(true)

6.3视图对象的一些属性存取方法 —getVars() 得到所有赋予的变量 —clearVars()清除所有赋予的变量 —getScriptPath($script) 得到给定脚本的路径 —getScriptPaths()得到所有脚本的路径 —getHelperPath($helper)得到某个指定助手类的路径 —getHelperPaths()得到所有助手的路径 —getFilterPath($filter) 得到某个指定过滤器类的路径 —getFilterPaths()得到所有过滤器的路径

6.4视图的路径: 6.4.1视图脚本的搜寻路径 如果引导文件中$fc->setParam('noViewRenderer', false); 则默认指定视图文件views/scripts/[controller_name]/[action].phtml 在实际的程序代码中,为了获得可定制的灵活性,都在控制器中实际指定了视图文件的路径: 指定路径例句:$view->setScriptPath('…/views');或 $view->addScriptPath('…/views'); 这个时候,引导文件必须有$fc->setParam('noViewRenderer', true);语句,即设置noViewRenderer为true。 6.4.2视图脚本的搜寻的优先顺序 $view = new Zend_View(); $view->addtScriptPath('…/views1'); $view->addScriptPath('…/views2'); $view->addScriptPath('…/views3'); Zend的手册是这样说的:“如果没有指定任何搜素路径,则在控制器文件下搜索视图文件。”但是通过实际环境测试,发现这时会报告错误: “no view script directory set; unable to determine location for view script” 看起来最少需要指定一个搜索路径。 如果指定了多条搜素路径,则最后的搜索路径优先。也就是说,如果所有的搜索路径下有相同的视图文件,则最后路径下的起作用,它覆盖了前边路径下的视图文件。

6.5视图控制脚本及其变量传递 ZF的控制器是实例化和设置Zend_View的地方。在这里,我们给视图赋值并告诉它用指定的视图脚本去呈现它们。 6.5.1给视图对象赋值 示例: $view->Variable=”……”;的形式     function assign1Action()     {       $view = new Zend_View();       $view->setScriptPath('views');       $view->strictVars(true);       $view->a = "Hay";       $view->b = "Bee";       $view->c = "Sea";       $view->d;       echo $view->render('tp_abc.php');    } 示例: $view-> assign(' Variable ', "……");的形式     function assign2Action()     {       $view = new Zend_View();       $view->setScriptPath('views');       $view->assign('a', "Hay");       $view->assign('b', "Bee");       $view->assign('c', "Sea");       echo $view->render('tp_abc.php');    } 示例:数组    function assign3Action()     {       $view = new Zend_View();       $view->setScriptPath('views');       $array = array(         'a' => "Hay",         'b' => "Bee",         'c' => "Sea",       );       $view->assign($array);       echo $view->render('tp_abc.php');    } 示例:对象     function assign4Action()     {       $view = new Zend_View();       $view->setScriptPath('views');       $obj = new StdClass;       $obj->a = "Hay";       $obj->b = "Bee";       $obj->c = "Sea";       $view->assign((array) $obj);       echo $view->render('tp_abc.php');    } 示例:     使用回调函数。     function myhtmlentityAction()     {       $view = new Zend_View();       $view->setScriptPath('views'); //自定义类,在/models文件夹下的myclass.php文件中定义       $mycls = new myClass(); //调用$mycls类的myHtmlEntity方法       $view->setEscape(array($mycls, 'myHtmlEntity'));

      $obj = new StdClass;       $obj->a = "the words hay bee sea ";       $obj->b = "this is bee";       $obj->c = " this is sea";       $view->assign((array) $obj);       echo $view->render('tp_abc.php');    } tp_abc.php视图脚本模板文件内容: <?php   echo 'a = ' . $this->escape($this->a).'<br>';   echo 'b = ' . $this->escape($this->b).'<br>';   echo 'c = ' . $this->escape($this->c).'<br>';    ?> myclass.php文件内容: <?php   class myClass   {     public function __construct($options = null)     {     }     function myHtmlEntity($val)     {//把所有单词首字母变为大写       return ucwords($val);     }   } ?> 输出结果: a = The Words Hay Bee Sea b = This Is Bee c = This Is Sea

在使用Python来安装geopandas包时,由于geopandas依赖于几个其他的Python库(如GDAL, Fiona, Pyproj, Shapely等),因此安装过程可能需要一些额外的步骤。以下是一个基本的安装指南,适用于大多数用户: 使用pip安装 确保Python和pip已安装: 首先,确保你的计算机上已安装了Python和pip。pip是Python的包管理工具,用于安装和管理Python包。 安装依赖库: 由于geopandas依赖于GDAL, Fiona, Pyproj, Shapely等库,你可能需要先安装这些库。通常,你可以通过pip直接安装这些库,但有时候可能需要从其他源下载预编译的二进制包(wheel文件),特别是GDAL和Fiona,因为它们可能包含一些系统级的依赖。 bash pip install GDAL Fiona Pyproj Shapely 注意:在某些系统上,直接使用pip安装GDAL和Fiona可能会遇到问题,因为它们需要编译一些C/C++代码。如果遇到问题,你可以考虑使用conda(一个Python包、依赖和环境管理器)来安装这些库,或者从Unofficial Windows Binaries for Python Extension Packages这样的网站下载预编译的wheel文件。 安装geopandas: 在安装了所有依赖库之后,你可以使用pip来安装geopandas。 bash pip install geopandas 使用conda安装 如果你正在使用conda作为你的Python包管理器,那么安装geopandas和它的依赖可能会更简单一些。 创建一个新的conda环境(可选,但推荐): bash conda create -n geoenv python=3.x anaconda conda activate geoenv 其中3.x是你希望使用的Python版本。 安装geopandas: 使用conda-forge频道来安装geopandas,因为它提供了许多地理空间相关的包。 bash conda install -c conda-forge geopandas 这条命令会自动安装geopandas及其所有依赖。 注意事项 如果你在安装过程中遇到任何问题,比如编译错误或依赖问题,请检查你的Python版本和pip/conda的版本是否是最新的,或者尝试在不同的环境中安装。 某些库(如GDAL)可能需要额外的系统级依赖,如地理空间库(如PROJ和GEOS)。这些依赖可能需要单独安装,具体取决于你的操作系统。 如果你在Windows上遇到问题,并且pip安装失败,尝试从Unofficial Windows Binaries for Python Extension Packages网站下载相应的wheel文件,并使用pip进行安装。 脚本示例 虽然你的问题主要是关于如何安装geopandas,但如果你想要一个Python脚本来重命名文件夹下的文件,在原始名字前面加上字符串"geopandas",以下是一个简单的示例: python import os # 指定文件夹路径 folder_path = 'path/to/your/folder' # 遍历文件夹中的文件 for filename in os.listdir(folder_path): # 构造原始文件路径 old_file_path = os.path.join(folder_path, filename) # 构造新文件名 new_filename = 'geopandas_' + filename # 构造新文件路径 new_file_path = os.path.join(folder_path, new_filename) # 重命名文件 os.rename(old_file_path, new_file_path) print(f'Renamed "{filename}" to "{new_filename}"') 请确保将'path/to/your/folder'替换为你想要重命名文件的实际文件夹路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值