Разбор и переписывание HTML с PHP - PullRequest
0 голосов
/ 18 марта 2011

Я использую Joomla 1.5 и скопировал mod_mainmenu для создания пользовательского модуля меню.В меню есть пункты подменю (внутренние теги UL).Вот HTML-код меню:

<ul id="sub-menu">
    <li class="parent item10"><a href="link1.php"><span>Arts</span></a>
        <ul>
            <li class="item29">
                <a href="link2.php"><span>Arts Show</span></a></li>
            <li class="item29">
                <a href="link3.php"><span>Another Arts Show</span></a></li>
        </ul>
    </li>
    <li class="parent item15"><a href="link6.php"><span>News</span></a>
        <ul>
            <li class="item18">
                <a href="link7.php"><span>News Show</span></a></li>
        </ul>
    </li>
</ul>

Мне нужно взять приведенный выше HTML-код и переписать его, чтобы он выглядел так, прежде чем он достигнет страницы:

<div id="sub-menu">
    <h3 class="parent item10"><a href="link1.php"><span>Arts</span></a></h3>
    <div>
       <a class="item29" href="link2.php"><span>Arts Show</span></a><br />
       <a class="item29" href="link3.php"><span>Another Arts Show</span></a>
    </div>
    <h3 class="parent item15"><a href="link6.php"><span>News</span></a></h3>
    <div>
       <a class="item18" href="link7.php"><span>News Show</span></a>
    </div>
</div>

Как это сделать в PHP?Спасибо.

Ответы [ 3 ]

1 голос
/ 18 марта 2011

Поскольку jQuery UI Accordion не обрабатывает вложенный список, вы можете использовать другие подключаемые модули jquery (giyf).

Если вы хотите изменить вывод html из вашего дублированного mod_mainmenu, просто найдите / измените соответствующий код (это должно быть в представлении, поскольку joomla использует mvc).

1 голос
/ 02 декабря 2011

Вот полный скрипт для выполнения этой работы. Это в чистом php.

<?php
    $dataStr = '<ul id="sub-menu">
    <li class="parent item10"><a href="link1.php"><span>Arts</span></a>
        <ul>
            <li class="item29">
                <a href="link2.php"><span>Arts Show</span></a></li>
            <li class="item29">
                <a href="link3.php"><span>Another Arts Show</span></a></li>
        </ul>
    </li>
    <li class="parent item15"><a href="link6.php"><span>News</span></a>
        <ul>
            <li class="item18">
                <a href="link7.php"><span>News Show</span></a></li>
        </ul>
    </li>
</ul>';


    $tempStr = str_replace('<ul ','<div ',$dataStr);
    $dataStr = str_replace('<li class="parent','<h3 class="parent ',$tempStr);
    $tempStr = str_replace('<ul>','<div>',$dataStr);
    $dataStr = str_replace('</ul>','</div>',$tempStr);
    $tempStr = str_replace('</li>','',$dataStr);
    $dataStr = str_replace('><a ','><a_keep ',$tempStr);
    $tempStr = str_replace('<a ','',$dataStr);
    $dataStr = str_replace('<li ','<a ',$tempStr);
    $tempStr = str_replace('><a_keep ','><a ',$dataStr);

    $dataStr = $tempStr;

    $newDataStr = "";
    $startIndex = 0;
    $endIndex = strpos($dataStr, "\n", $startIndex);
    $trimNextLine = false;

    while (1==1){
        if($endIndex == false){
            break;
        }

        $currentLine = substr($dataStr,$startIndex,$endIndex-$startIndex);
        $trimCurrentLine = ltrim($currentLine);
        $subStrCurrentLine = substr($trimCurrentLine,0,5);
        if($subStrCurrentLine==""){
            ;//do nothing
        }
        else if($subStrCurrentLine=="<h3 c"){
            $tempString = '    '.ltrim(substr($currentLine,0,strlen($currentLine)));
            $newDataStr = $newDataStr . $tempString . "</h3>\n";
        }
        else if($subStrCurrentLine=="<a cl"){
         $tempString = '        '.ltrim(substr($currentLine,0,strlen($currentLine)-1));
         $newDataStr = $newDataStr . $tempString;
         $trimNextLine = true;
        }
        else if($subStrCurrentLine=="<div>"){
         $tempString = '    '.ltrim(substr($currentLine,0,strlen($currentLine)));
         $newDataStr = $newDataStr . $tempString."\n";
         $trimNextLine = true;
        }
        else if($subStrCurrentLine=="</div"){
         $tempString = '    '.ltrim(substr($currentLine,0,strlen($currentLine)));
         $newDataStr = $newDataStr . $tempString."\n";
         $trimNextLine = true;
        }
        else{
            if ($trimNextLine == true){
                $trimNextLine = false;

                $nextStartIndex = $endIndex+1;
                $nextEndIndex = strpos($dataStr, "\n", $nextStartIndex);
                $nextLine = substr($dataStr,$nextStartIndex,$nextEndIndex-$nextStartIndex);
                $trimNextLine = ltrim($nextLine);
                $subStrNextLine = substr($trimNextLine,0,5);

                if($subStrNextLine=="<a cl"){
                    $newDataStr = $newDataStr . ' ' . ltrim($currentLine)."<br />\n";
                }
                else{
                    $newDataStr = $newDataStr . ' ' . ltrim($currentLine)."\n";
                }
            }
            else{
                $newDataStr = $newDataStr . $currentLine."\n";
            } 
        }

        $startIndex = $endIndex+1;
        $endIndex = strpos($dataStr, "\n", $startIndex);
    }

    $tempString = substr($dataStr,$startIndex,strlen($dataStr)-$startIndex);
    $newDataStr = $newDataStr . $tempString . "\n";

    echo($newDataStr);
?>
1 голос
/ 18 марта 2011

PHP имеет класс Document Object Model , который можно использовать для этой цели.

Однако было бы намного проще просто изменить шаблон, которыйуправляет выводом в Joomla и вносит изменения в его источнике.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...