Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何更改服务器上文件的顺序?_Php_Filesystems_Cakephp 2.0_Fetch - Fatal编程技术网

Php 如何更改服务器上文件的顺序?

Php 如何更改服务器上文件的顺序?,php,filesystems,cakephp-2.0,fetch,Php,Filesystems,Cakephp 2.0,Fetch,如何更改文件系统中文件的顺序?我正在用Fetch 我问这个问题的原因是因为我有一个菜单栏,可以根据“页面”文件夹中的内容自动列出网站中的页面。我在fetch上看到,它们是按字母顺序排列的“blog.ctp、games.ctp、home.ctp、news.ctp”。因此,我希望菜单栏将页面列为“博客游戏主页新闻”,但它将页面列为“游戏新闻博客主页”。最终我希望订单是“家庭游戏博客新闻”。如何更改文件的顺序 这是我的代码,以防有用。但我的代码不是问题所在……我只需要知道如何更改文件夹“Pages”中

如何更改文件系统中文件的顺序?我正在用Fetch

我问这个问题的原因是因为我有一个菜单栏,可以根据“页面”文件夹中的内容自动列出网站中的页面。我在fetch上看到,它们是按字母顺序排列的“blog.ctp、games.ctp、home.ctp、news.ctp”。因此,我希望菜单栏将页面列为“博客游戏主页新闻”,但它将页面列为“游戏新闻博客主页”。最终我希望订单是“家庭游戏博客新闻”。如何更改文件的顺序

这是我的代码,以防有用。但我的代码不是问题所在……我只需要知道如何更改文件夹“Pages”中的文件顺序

if($handle=opendir('../View/Pages/'))
{
while(false!==($entry=readdir($handle)))
{
if(strpos($entry,.ctp)!==False)
echo'.$this->Html->link(substr($entry,0,-4),
数组('controller'=>'pages','action'=>'display',substr($entry,0,-4)),
数组('escape'=>false))。';
}
}

在文件名的开头或结尾添加优先级标志。即游戏1、主场2等。。。使用PHP Sort()对文件名数组进行排序,并使用substr($filename,-2)替换文件名中的最后两个字符

CakePHP
文件夹
实用程序可以选择对结果进行排序

但是,如果不希望按字母顺序显示页面,请在文件名前面加上数字并创建特殊路由,或者不使用文件名进行排序,而是手动指定顺序

最后,基于视图文件动态创建菜单的唯一原因是自动为您生成菜单。然而,这些变化很可能不会经常发生,根据您的评论(首选顺序),您心里确实有一个特定的顺序

最好的解决方案是手动指定排序顺序。这也将提高性能,因为服务器不必对每个请求进行目录扫描

例如:

/**
 * MenuItems
 *
 * preferable pass this as a viewVar to the View
 *
 * file => title
 */
$menuItems = array(
    'home' => 'HOME',
    'blog' => 'BLOG',
    ....
);

foreach($menuItems as $file => $title) {
     // your code here
}
将其移动到模型 在视图中检索文件列表不是执行此操作的位置。最好事先读取文件,并通过viewvar将其传递给视图。因为读取文件实际上是“检索数据”,所以可能需要为此创建一个未连接到数据库表的模型

例子 app/Model/Menuoption.php

App::uses('Folder', 'Utility');

class Menuoption extends AppModel {
    // this model does not use a database table
    public $useTable = false;


    public function getOptions()
    {
        // NOTE: or use the 'manually' created menuItems here
        $myFolder = new Folder('/path/to/directory');
        return $myFolder->find('*.ctp', true);
    }
}
控制器内部;例如,在beforeRender()回调中,或在常规操作中

public function beforeRender()
{
     $this->set('files', ClassRegistry::init('Menuoption')->getOptions());

}
在视图中,您现在可以通过
$files
变量访问结果

 foreach ($files as $filename) {

   // your code here 

}

看这里:马特,我想要一个自定义排序,而不是按字母顺序。我只是做了一个附带的评论,我认为默认情况下它们会按字母顺序排列,但令我惊讶的是它们是按其他顺序排列的。这是一个很好的解决方法,谢谢。我仍然想知道是否可以简单地手动更改文件的顺序。我不想用文件名来定义顺序,我想用顺序来定义顺序。这种变通方法将使您能够为文件名设置手动顺序,从而使您具有更大的灵活性……我知道您的答案会起作用,如果需要,我将实施它,但是更改文件名将打破cakephp惯例,因此我不希望这样做。我只想简单地将我想首先读取的文件拖到文件列表的顶部,使PHP先读取第一个文件,然后读取第二个文件,等等……但是Fetch不允许我单击并拖动文件来手动更改顺序。如果使用Fetch或其他方法都无法做到这一点,我将实现您的变通方法,因为这是一个很好的解决方案函数并编写自己的排序函数…更改文件名打破了CakePHP惯例,定义自己的排序函数违背了我的目的。从现在起,我将在CakePHP框架中构建一个功能,用于我所有的网站。此功能将读取我的文件系统中的“页面”文件夹,其中包含我网站中的所有主页。然后它会自动生成指向我标题中页面的链接。如何访问文件系统以更改文件的顺序,使其以不同的顺序读取文件?Fetch不允许我更改文件的顺序。
public function beforeRender()
{
     $this->set('files', ClassRegistry::init('Menuoption')->getOptions());

}
 foreach ($files as $filename) {

   // your code here 

}