我正在使用PHP codeigniter重新构建一个网站,其中主要包含静态页面和一些散布的动态页面。问题是,页面在导航中的深度为1-5层(例如:example.com/about/history/people/person/photos)。
我不确定如何在控制器中实现它。我目前在switch语句中嵌套了一组疯狂的switch语句。这是一个简单的例子:
class About extends MY_Controller
{
//**** INDEX page ****
public function index()
{
$this->setTitle('About');
$this->setDescription('About Stuff');
$this->loadView('about/index');
}
//-------------------------HISTORY section--------------------------------
public function history($sub1 = "", $sub2 = "", $sub3 = "", $sub4 = "")
{
$path = "";
switch($sub1){
//_____ PEOPLE section ____
case 'people':
switch($sub2){
//____ PERSON section ____
case 'person':
switch($sub3){
//**** PHOTOS page ****
case 'photos':
$this->setTitle('Photos');
$this->setDescription('Photo stuff');
$path = 'people/person/photos';
break;
//**** DOCUMENTS page ****
case 'documents':
//Load special scripts
$this->setTitle('Documents');
$this->setDescription('Document stuff');
$path = 'people/person/documents';
break;
//**** INDEX page ****
default:
$this->setTitle('Person');
$this->setDescription('Person stuff');
$path = 'people/person/index';
}
break;
//**** AnotherPerson page *****
case 'anotherPerson':
//Load database
$this->setTitle('AnotherPerson');
$this->setDescription('AnotherPerson stuff');
$path = 'people/anotherperson';
break;
//**** INDEX page ****
default:
$this->setTitle('People');
$this->setDescription('People stuff');
$path = 'people/index';
}
break;
//**** INDEX page ****
default:
$this->setTitle('History');
$this->setDescription('History stuff');
$path = 'index';
}
$this->loadView('about/history/' . $path );
}
}
我觉得我接近这个错误,感觉很乱。所以我的问题是:有更好的(更紧凑/清洁/动态)方式吗?
答案 0 :(得分:0)
您有几个选择。
您可以将case语句放在单独的函数中。例如。如果您case 'documents'
,您可以将其置于私人函数中:
私人职能文件(){ //加载特殊脚本 $这 - >的setTitle( '文件'); $ this-> setDescription('Document stuff'); $ path ='people / person / documents'; }
您可以在其中创建一个带有标题,描述等的关联数组,并检查变量是否已填充。在此之后,您可以使用$sub
vars调用数组。