草庐IT

php - 使用 PHP 和 NestedSortable 制作列表

coder 2023-10-25 原文

我正在尝试制作自己的 CMS,我想做的一件事就是制作它,以便我可以重新排序和更改 CMS 中的导航元素。我找到了一个名为 NestedSortable 的插件让我这样做。我用过它并遇到了很多麻烦,所以我让我的 PHP 专家 friend 帮我做。她坐下来,挣扎了一会儿,然后让它开始工作。

好吧,我是个白痴,那天晚些时候回到家后,我坐下来,拿了我的本地副本,添加了一些东西并上传到服务器......没有意识到我忘记下载更新的版本!太糟糕了,我 friend 的所有工作都没有了,我被一个不起作用的导航调整困住了。

我丢失了 index.php(将其显示在页面上)文件,但我保存了 nav_adjust.php(将其输入到数据库中)。我想要的只是能够重新排序导航并将其发送到数据库以在刷新时正确显示。按下提交按钮时,信息将发送到 nav_adjust.php。

唯一的限制是导航只能有 3 个级别(主要、子级和孙级)。我的导航看起来像它们都是主要的。我已经对所有图像发出 echo 提醒,这样您就可以看到 nav_adust.php 正在做什么:

(请注意数组值。)

这就好像 parent 有一个 child :

这就好像一个 child 身上有两个孙子:

这是混合的:

我的 index.php 文件不再工作了,看起来像这样:

<form method="post" action="nav_adjust.php"> <!--This form posts to nav_adjust.php-->
    <ol id="pageList">
    <?php 
    $nav = mysql_query("SELECT * FROM `".$name['Website']);
    $num = 0;
    while( $col_nav = mysql_fetch_assoc($nav) ){
        if ($col_nav['orderId'] != 0) {
            echo "<li id='list_".$col_nav['id']."'>
            <div>Example Title</div>";  
        } else {
            echo "<ol>
                <li id='list_".$col_nav['id']."'>
                    <div><h1>Example Title</div>";
                </li>
            </ol>\n";
        }
        echo "</li>\n";
        ++$num;
    }
    ?>
    </ol>
    <button type='submit'>Update</button>
    </form>

<script>

$(document).ready(function(){

    $('#pageList').nestedSortable({
            /*option that don't matter*/
            });

    $("button").on('click', function(event){
        serialized = $('ol#pageList').nestedSortable('serialize');
          $.post( "nav_adjust.php", serialized, function( data ) {
            alert( data );
            });
        return false;
    });

});

 </script>

同样,上面的代码不起作用。而不是使列表项看起来像这样:

<ol>
<li>
    <ol>
    <li></li>
    ...
    </ol>
 </li>
 ...
 </ol>

它看起来像这样(注意 ol 之前的闭合 li 标签):

<ol>
<li></li>
<ol>
    <li></li>
</ol>
...
</ol>

这是我 friend 为我做的 nav_adjust.php,如果从 index.php 中获得正确的信息,它会很好地工作

$list = $_POST['list'];
$num = 1;
foreach ($list as $key => $value ) {
    if ($value == "null") {
        //$value = $num;
        mysql_query("UPDATE `myTable` SET orderId=".$num.", parent='null' WHERE id=".$key."");
        $text .= "UPDATE `myTable` SET orderId=".$num.", parent='null' WHERE id=".$key."\n\n";
    } else {
                $query = "UPDATE `myTable` SET orderId=". $num .", parent=".$value;
                $text .= "UPDATE `myTable` SET orderId=". $num .", parent=".$value."\n\n";
                $var = $list[$value];
                if ( $var != null && $list[$var] != null ) {
                    $query .= ", grandchild = 1";
                }
                $query .= " WHERE id=".$key; 
        mysql_query($query);
    }
    $num++;
}

echo "Content is below\n";
print_r( $_POST['list']);
echo $text;

所以,作为回顾,我有一个导航,它可以将序列化数据从 index.php 提交到 nav_adjust.php,然后再将其提交到数据库中(然后将其回显,这样我就知道我做了什么)。然后 index.php 在刷新时应该将列表项保持在适当的位置,所有子项都是子项等。但是我覆盖了 index.php 并且不知道我的 friend 是怎么做到的。

我的表格字段是(在我忘记之前):

id、title、orderId(父)、父(子)和孙。

我本来打算更改 orderId 和 parent 的名称以减少混淆,但我从来没有这样做:(

如果有人能帮助我,我将非常感激。

如果有任何其他信息我可以给你,请询问!

最佳答案

经过几个小时的努力,我灵机一动,问 GoDaddy 他们是否备份了文件和目录,他们做到了!所以我拿回了我的文件。对于任何感兴趣的人,index.php 中缺少的代码如下所示(其中 $name['website'] 是 'myTable'):

$parents = mysql_query("SELECT * FROM `".$name['Website']."` WHERE parent = 0 ORDER BY `orderId` ASC");

    while($parent = mysql_fetch_array($parents)){            
        echo "<li id='list_".$parent['id']."'>
        <div>
            <span class='disclose'>
                <span></span>
            </span>
            <span class='title'>
                <a href='mod.php?id=".$parent['id']."'>".stripslashes($parent['page'])."</a>
            </span>
        </div>";    

        // Get chil elements

        $children = mysql_query("SELECT * FROM `".$name['Website']."` WHERE parent = " . $parent['id'] . " ORDER BY `orderId` ASC") or die(mysql_error());
        while($child = mysql_fetch_array($children)){
            echo "<ol>
            <li id='list_".$child['id']."'>
                <div>
                    <span class='disclose'>
                        <span></span>
                    </span>
                    <span class='title'>
                        <a href='mod.php?id=".$child['id']."'>".stripslashes($child['page'])."</a>
                    </span>
                </div>";
            # Get grandchild elements
            # (Please consider making an recursive function or so out of this if you plan to have grand grand children etc.,
            # Because if you create new whiles manually for every instance, this is gonna look pretty darn ugly.
            # Also, it makes it impossible to have an unknown depth.)           
            $grandchildren = mysql_query("SELECT * FROM `".$name['Website']."` WHERE parent = " . $child['id'] . " AND grandchild = 1 ORDER BY `orderId` ASC");             
            while($grandchild = mysql_fetch_array($grandchildren)){
                echo "<ol>
                    <li id='list_".$grandchild['id']."'>
                        <div>
                            <span class='disclose'>
                                <span></span>
                            </span>
                            <span class='title'>
                                <a href='mod.php?id=".$grandchild['id']."'>".stripslashes($grandchild['page'])."</a>
                            </span>
                        </div>
                    </li>
                </ol>\n";               
            }

            // Close child
            echo "</li>
            </ol>\n";
        }
        // Close parent
        echo "</li>\n";
    }
    ?>

关于php - 使用 PHP 和 NestedSortable 制作列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15170429/

有关php - 使用 PHP 和 NestedSortable 制作列表的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  3. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  4. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  5. ruby - 在 Ruby 中使用匿名模块 - 2

    假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于

  6. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  7. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  8. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  9. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  10. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

随机推荐