【问题标题】:Calling PHP function twice, only works once调用PHP函数两次,只工作一次
【发布时间】:2011-09-16 19:43:34
【问题描述】:

我正在尝试使用 PHP 关联数组将文本和图像的不同值回显到 HTML 中,以用于同一页面上 jQuery 幻灯片的不同实例。这是 HTML:

<div class='slide'>
    <div class='mosaic-block fade'>
        <div class='mosaic-overlay'>
        <div class='text'><p>This is the text!</p></div>
            </div>
        <div class='mosaic-image'><img src='imgs/the-img.png'/></div>
    </div> <!-- mosaic-block fade -->
</div> <!-- .slide --> ` 

我为每种类型的幻灯片编写了数组,其中包含每张幻灯片的文本和图像,以下是示例:

$my_content = array( 
        'image1.png' => 'image1 text!',
        'image2.png' => 'image2 text!'
        );

然后我写了一个带有参数的函数,用于幻灯片的类别和内容:

function gallery_content($content) {
    foreach ( $content as $img => $txt ) {
    echo "<div class='slide'>
        <div class='mosaic-block fade'>
        <div class='mosaic-overlay'>
            <div class='text'><p>".$txt."</p></div></div>
            <div class='mosaic-image'><img src='imgs/other/".$img."'/></div>
        </div> <!-- mosaic-block fade -->
        </div> <!-- .slide --> ";
}

我这样称呼它:gallery_content($my_content);,它运行得非常好。但是当我尝试为另一组值再次调用它时,似乎只有第一个实例有效。我尝试直接使用数组而不是变量作为参数,并为每个幻灯片制作一个单独的函数,但仍然得到相同的结果。

为什么不能多次调用函数?提前致谢。

【问题讨论】:

  • 第二次调用是什么行为?
  • 似乎工作:codepad.org/ZWhRPYPJ
  • 您确定这是 PHP 问题而不是 jQuery 问题吗?尝试创建一个普通的 html 文件并手动将一些图像的数据输入到 jQuery 幻灯片的两个实例中 - 是否有效?
  • 您可能在此处编写的函数中错过了最后一个右大括号,但我想这不是您问题的原因。
  • 调用gallery_content(array("1.png" =&gt; "One", ...))时是否只处理第一个元素?

标签: php foreach associative-array


【解决方案1】:

我的猜测是 PHP 正在做它的工作。检查输出文档的来源,您应该会看到正确数量的画廊)。我怀疑 gallery 类的 CSS 规则(例如绝对定位它的规则)导致只有一个画廊可见。如果您可以使用内联 CSS(这通常是不可接受的),您可以让 PHP 根据图库编号添加自定义位置值(例如顶部):

function gallery_content($content) {
    $num = 0;
    foreach ( $content as $img => $txt ) {
    echo "<div class='slide' style='top: ".(100 + 50*$num)."px'>
        <div class='mosaic-block fade'>
        <div class='mosaic-overlay'>
            <div class='text'><p>".$txt."</p></div></div>
            <div class='mosaic-image'><img src='imgs/other/".$img."'/></div>
        </div> <!-- mosaic-block fade -->
        </div> <!-- .slide --> ";
}

上面的示例为第一个画廊元素提供了 100 像素(100 + 50 * 0)的顶部,第二个元素的顶部为 150 像素,第三个元素为 200 像素,依此类推。你也可以使用一些 CSS3 和新的 calc() 特性来代替它,但是 CSS3 选择器是实验性的,在一些旧的浏览器中不支持。使用 PHP 和内联样式将是您最安全的选择。

【讨论】:

    【解决方案2】:

    查看最终页面(HTML)上生成的源代码来判断 PHP 是否完成了它的工作。我认为那是您生成的“galaries”(DIV)可能具有相同的 ID 或其他属性通过 jQuery 激活它们,因此只有一个正在正常运行(第一个),而第二个没有运行。

    希望对您有所帮助。

    【讨论】:

    • 我认为你是对的 - 当我将幻灯片类更改为 slide1slide2 时,幻灯片都显示在适当的位置,但其他 jQuery 功能(隐藏滚动、导航divs) 不显示。我会做更多的实验,看看。
    • 是的,绝对是问题所在。在单个页面上显示多个幻灯片比我想象的要复杂得多 - 看起来 jQuery Cycle Plugin 是一个常见的解决方案。谢谢!
    • 我认为您应该接受其中一个回复作为答案,因为您有自己的解决方案。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    相关资源
    最近更新 更多