我目前正在研究this website,我需要一些关于php和ajax的帮助。 如果这是一个简单的解决方案,我道歉,但我到处寻找,我找不到解决方案。
无论如何,左边的链接用ajax加载右边的内容。这很容易。 'gallery'下的子链接加载了一个像这样的php文件:
<?php
include "connect_to_mysql.php";
include_once("classes/category.class.php");
include_once("classes/album.class.php");
include_once("classes/images.class.php");
$category = new category();
$categories = $category->loadAbstract();
?>
<div id="image_gallery">
<?php
foreach ($categories as $category) {
if ($category->hasAlbums()) {
foreach ($category->albums as $album) {
echo '<div class="album_container">';
echo '<div class="sublinks" onClick="loadAlbum(\''.$album->getId().'\')">
<h4>'.$album->getName().'</h4>
</div>';
}
}
}
?>
</div>
<script>
function loadAlbum(Id) {
$.ajax({
type: 'POST',
url: 'loadalbum.php',
data: "selectedAlbum="+Id,
success: function(result) {
$("#"+Id).html(result);
}
});
</script>
显然,这会调用loadalbum.php,我必须添加相同的内容:
<?php
include "connect_to_mysql.php";
include_once("classes/category.class.php");
include_once("classes/album.class.php");
include_once("classes/images.class.php");
$selectedAlbum=$_POST['selectedAlbum'];
?>
问题在于,每当我在左侧选择不同的类别时,它必须调用这些类,然后当从该类别中选择一个相册时,将再次调用这些类。这会大大减慢加载时间,因为它必须继续从数据库中检索数据。
如果已加载相册,我会使用一些javascript来阻止它加载相册,但只要在左侧选择了不同的链接,它就会回到原点。
有没有办法在网页打开时加载我的所有类,然后在我的php文件通过ajax加载时引用它们?
提前致谢!
答案 0 :(得分:0)
我认为您需要重新定义您的实体关系。根据您的代码:类别,相册和图像都具有相同的地位。我不认为这是真的,但这不是我的设计。无论如何,请将您的模型包含在控制器类中
<?php
require_once "classes/album.class.php";
require_once "classes/category.class.php";
require_once "classes/images.class.php";
class Controller
{
public $album;
public $image;
public $category;
public function __construct()
{
$this->album = new Album();
$this->image = new Image();
$this->category= new Category();
}
public invoke(){
$categories = $this->category->loadAbstract();
include "path-to-gallery.php";
}
}
现在,在您的控制器中,您可以访问所有模型。将数据操作函数放在模型类中,并从控制器中调用它们。包含的页面将预先加载$ categories数据。然后,您可以在视图中循环浏览它。
两个重要注意事项:1)要求运行时存在必须的文件。如果他们不这样做,你会收到致命的错误。包含只会发出警告,可能会被抑制,2)要求和包括语言结构,而不是方法。括号是不必要的。
我已经为您的控制器类提供了基本大纲。我的方式只是数百个其他MVC实现中的一个。许多人会争论我写的更精彩的观点。别担心。试着了解我提供的基础知识。如果它有帮助,那很好。一定要接受答案。如果没有,那就忽略它。
祝你好运。