php - 通过导航循环将子页面拉入正确的主题
php - looping through a navigation to pull sub pages into the right subject
我有一个包含两个 table 的数据库。
- table 1: - 'subjects'
- table 2: - 'pages'
我希望显示导航,以便获得具有相应主题的正确页面。
即
*subject 1
- page 1
- page 2
*subject 2
- page 1
我的页面有相同的 ID,将它们连接到它们的主题。例如,我将其命名为 'page_link' 或 'subject_link'
*subject 1 (has a subject_link of 1)
-page 1 (has a page_link of 1)
到目前为止,我的代码列出了主题 1 和其中的所有子页面。然后它列出了下一个主题,但没有列出它的子页面。
这是为什么?
<?php
// writing the query - selecting subject name
$subject_name_query = "SELECT id, subject_name, subject_link FROM subjects";
$subject_name_result = mysqli_query($connection, $subject_name_query);
// writing the query - selecting page
$page_name_query = "SELECT id, page_name, page_link FROM pages";
$page_name_result = mysqli_query($connection, $page_name_query);
?>
<ul>
<?php
while($subject_name = mysqli_fetch_assoc($subject_name_result)) {
echo '<li><a href="?subject=' . $subject_name['id'] . '">' . $subject_name['subject_name'] . '</a>';
while($page_name = mysqli_fetch_assoc($page_name_result)) {
if($page_name['page_link'] == $subject_name['subject_link']) {
echo '<ul><li><a href="?page=' . $page_name['id'] . '">' . $page_name['page_name'] . '</a></li></ul>';
}
}
echo '</li>';
}
?>
</ul>
<?php
// writing the query - selecting subject name
$subject_query = "SELECT id, subject_name, subject_link FROM subjects";
$subject_result = mysqli_query($connection, $subject_query);
// writing the query - selecting page
$page_query = "SELECT id, page_name, page_link FROM pages";
$page_result = mysqli_query($connection, $page_query);
function fetch_as_array($result){
$array = array();
while($row = mysqli_fetch_assoc($result)){
array_push($array, $row);
}
return $array;
}
$subject_array = fetch_as_array($subject_result);
$page_array = fetch_as_array($page_result);
foreach($subject_array as $subject){
echo '<li><a href="?subject=' . $subject['id'] . '">' . $subject['subject_name'] . '</a>';
foreach($page_array as $page){
if($page['page_link'] == $subject['subject_link']){
echo '<ul><li><a href="?page=' . $page['id'] . '">' . $page['page_name'] . '</a></li></ul>';
}
}
echo '</li>';
}
?>
这应该可以解决问题。
但是在 PHP 中添加标记太可怕了。我会使用像 Jade 或 Mustache 这样的模板语言,这取决于你想如何编写它。例如,对于您的情况,您可以这样做:
subjects.php
<?php
// THIS IS ALL THE SAME
// writing the query - selecting subject name
$subject_query = "SELECT id, subject_name, subject_link FROM subjects";
$subject_result = mysqli_query($connection, $subject_query);
// writing the query - selecting page
$page_query = "SELECT id, page_name, page_link FROM pages";
$page_result = mysqli_query($connection, $page_query);
function fetch_as_array($result){
$array = array();
while($row = mysqli_fetch_assoc($result)){
array_push($array, $row);
}
return $array;
}
$subject_array = fetch_as_array($subject_result);
$page_array = fetch_as_array($page_result);
// Different stuff is below:
foreach($subject_array as $subject){
$subject_array['pages'] = array();
foreach($page_array as $page){
if($page['page_link'] == $subject['subject_link']){
array_push($subject_array['pages'], $page);
}
}
}
// Initiate a new mustache engine with the directory being the inside the views folder.
$m = new Mustache_Engine(array(
'loader' => new Mustache_Loader_FilesystemLoader('/views')
));
// render using the 'subjects.mustache' file and the $subject_array to populate the template
echo $m->render('subjects', $subject_array);
?>
然后使用已经排序的视图数据,您可以编写一个模板来使用此数据:
subjects.mustache
<ul>
{{#subjects}}
<li>
<a href="?subject={{id}}">{{subject_name}}</a>
<ul>
{{#pages}}
<li>
<a href="?page={{id}}">{{page_name}}</a>
</li>
{{/pages}}
</ul>
</li>
{{/subjects}}
</ul>
因此它迫使您将 PHP 分开并专注于编写更好、更易于维护的代码。 {{mustache}} 只是其中一种模板语言,Jade 也非常酷并且提供了非常好的语法,它提供了这样的编写标记:
h1 Hello world
span= myVariable
而不是:
<h1>Hello World</h1>
<span><?php echo $myVariable; ?></span>
我有一个包含两个 table 的数据库。
- table 1: - 'subjects'
- table 2: - 'pages'
我希望显示导航,以便获得具有相应主题的正确页面。
即
*subject 1
- page 1
- page 2
*subject 2
- page 1
我的页面有相同的 ID,将它们连接到它们的主题。例如,我将其命名为 'page_link' 或 'subject_link'
*subject 1 (has a subject_link of 1)
-page 1 (has a page_link of 1)
到目前为止,我的代码列出了主题 1 和其中的所有子页面。然后它列出了下一个主题,但没有列出它的子页面。
这是为什么?
<?php
// writing the query - selecting subject name
$subject_name_query = "SELECT id, subject_name, subject_link FROM subjects";
$subject_name_result = mysqli_query($connection, $subject_name_query);
// writing the query - selecting page
$page_name_query = "SELECT id, page_name, page_link FROM pages";
$page_name_result = mysqli_query($connection, $page_name_query);
?>
<ul>
<?php
while($subject_name = mysqli_fetch_assoc($subject_name_result)) {
echo '<li><a href="?subject=' . $subject_name['id'] . '">' . $subject_name['subject_name'] . '</a>';
while($page_name = mysqli_fetch_assoc($page_name_result)) {
if($page_name['page_link'] == $subject_name['subject_link']) {
echo '<ul><li><a href="?page=' . $page_name['id'] . '">' . $page_name['page_name'] . '</a></li></ul>';
}
}
echo '</li>';
}
?>
</ul>
<?php
// writing the query - selecting subject name
$subject_query = "SELECT id, subject_name, subject_link FROM subjects";
$subject_result = mysqli_query($connection, $subject_query);
// writing the query - selecting page
$page_query = "SELECT id, page_name, page_link FROM pages";
$page_result = mysqli_query($connection, $page_query);
function fetch_as_array($result){
$array = array();
while($row = mysqli_fetch_assoc($result)){
array_push($array, $row);
}
return $array;
}
$subject_array = fetch_as_array($subject_result);
$page_array = fetch_as_array($page_result);
foreach($subject_array as $subject){
echo '<li><a href="?subject=' . $subject['id'] . '">' . $subject['subject_name'] . '</a>';
foreach($page_array as $page){
if($page['page_link'] == $subject['subject_link']){
echo '<ul><li><a href="?page=' . $page['id'] . '">' . $page['page_name'] . '</a></li></ul>';
}
}
echo '</li>';
}
?>
这应该可以解决问题。
但是在 PHP 中添加标记太可怕了。我会使用像 Jade 或 Mustache 这样的模板语言,这取决于你想如何编写它。例如,对于您的情况,您可以这样做:
subjects.php
<?php
// THIS IS ALL THE SAME
// writing the query - selecting subject name
$subject_query = "SELECT id, subject_name, subject_link FROM subjects";
$subject_result = mysqli_query($connection, $subject_query);
// writing the query - selecting page
$page_query = "SELECT id, page_name, page_link FROM pages";
$page_result = mysqli_query($connection, $page_query);
function fetch_as_array($result){
$array = array();
while($row = mysqli_fetch_assoc($result)){
array_push($array, $row);
}
return $array;
}
$subject_array = fetch_as_array($subject_result);
$page_array = fetch_as_array($page_result);
// Different stuff is below:
foreach($subject_array as $subject){
$subject_array['pages'] = array();
foreach($page_array as $page){
if($page['page_link'] == $subject['subject_link']){
array_push($subject_array['pages'], $page);
}
}
}
// Initiate a new mustache engine with the directory being the inside the views folder.
$m = new Mustache_Engine(array(
'loader' => new Mustache_Loader_FilesystemLoader('/views')
));
// render using the 'subjects.mustache' file and the $subject_array to populate the template
echo $m->render('subjects', $subject_array);
?>
然后使用已经排序的视图数据,您可以编写一个模板来使用此数据:
subjects.mustache
<ul>
{{#subjects}}
<li>
<a href="?subject={{id}}">{{subject_name}}</a>
<ul>
{{#pages}}
<li>
<a href="?page={{id}}">{{page_name}}</a>
</li>
{{/pages}}
</ul>
</li>
{{/subjects}}
</ul>
因此它迫使您将 PHP 分开并专注于编写更好、更易于维护的代码。 {{mustache}} 只是其中一种模板语言,Jade 也非常酷并且提供了非常好的语法,它提供了这样的编写标记:
h1 Hello world
span= myVariable
而不是:
<h1>Hello World</h1>
<span><?php echo $myVariable; ?></span>