1

我目前正在这个网站上工作,我需要一些关于 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 加载时引用它们?

提前致谢!

4

1 回答 1

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 实现中的一种。许多人会争论我所写内容的细节。别担心。试着理解我提供的基础知识。如果有帮助,那就太好了。一定要接受答案。如果不是,则忽略它。

祝你好运。

于 2012-07-11T21:10:47.517 回答