2010-11-18 8 views
0
php php

PHP - データを "オンザフライ"でアクセスしたり変更したりできますか?

しかし、コードは動的に生成され、1つの関数にロードされ、各ノード(この場合は<li>)に直接アクセスすることはできません。だから私のサイトでは、それはインクルードのように見える:

<?php include("but not the file but code above generated by some engine"); ?> 

すべてクリア?だからここには取り引きがある。

このコードを修正したいと思います。だから私は各<ul>要素がIDが増えている<div>の中に入るようにします。したがって、終了コードは次のようになります:

<div id="1"> 
    <ul> 
    <li><?php smth ?></li> 
    <li><?php smth ?></li> 
    <li><?php smth ?></li> 
    </ul> 
</div> 

<div id="2"> 
    <ul> 
    <li><?php smth ?></li> 
    <li><?php smth ?></li> 
    <li><?php smth ?></li> 
    </ul> 
</div> 

(...) 

私は独自のコンセプトを、サイトのコードをロードし、forループで<div>sを追加した後にストリッピングすることに基づいていますが、よりエレガントな方法があると思いますか?

+0

私はob_xmlfilterについて仮定されているが、私は名前を呼ばれました。しかし、一般に、出力をキャプチャしてQueryPathまたはphpQueryにパイプし、PHP内で再構成(jQueryライク)することは可能です。欠点は、これが測定可能な減速であることです。だから、本当に良いユースケースが必要です。 – mario

答えて

-1

javascriptとjqueryを使用します。

$(document).ready(function() { 
    var i = 1; 
    $("ul").each(function() { 
     $(this).wrap('<div id="' + i + '" />'); 
     i++; 
    }); 
}); 
+1

それは無効にされたJSを持つ人々に全体のレイアウトを殺すでしょう。 – fomicz

+0

彼は「ロードした後」と書いています。私は、ページがサーバー側に残ってブラウザでレンダリングされた後のことを意味すると仮定しました。これは、もちろん、あなたはjavascriptを使用する必要があることを意味します。 –

-1

あなたは<ul>のチャンクにコードを破るためにreqular表現を使用でき、その後、それらの周りのdivのと一緒に作品を組み立て直します。

基本的に、元の文字列を配列に分割してから、配列をステップ実行して文字列を再作成します。あなたがステップするたびに、最初にdivを追加し、最後にdivを追加して、最後の文字列に新しい<ul>を追加するだけで、復帰するdivを追加するだけです。

1

まず、HTMLをクリーンアップします。 </ul>ulタグを閉じ、新しいタグを開けないでください。<ul>で終了してください。第2に、少なくともHTML4では数値で始まるidの値を持つことはできません。また

、私はあなたがHTMLを出力したファイルを含めている意味だと思いますが

<?php include("but not the file but code above generated by some engine"); ?> 

の意味を正確にはわかりません。これは物事を少し難しいものにします。出力バッファリングをオンにする必要があります。キャプチャされたコンテンツで何かDOMDocumentものを行うことができます。これまでで最も簡単な解決策が含まれているファイルを変更することです

もちろん
<?php 

ob_start(); // turn output buffering on 
include('your_file.php'); // include the contents of your_file -- contents go into the output buffer 
$text = ob_get_clean(); // put the contents of the output buffer into $text 

$dom = new DOMDocument(); // create a DOMDocument to work on 

$f = $dom->createDocumentFragment(); 
$f->appendXML($text); 
$dom->appendChild($f); // these three lines import $text into $dom 

$i = 0; 
while ($dom->childNodes->length > 0) { // loop through the elements from your file 
    $child = $dom->childNodes->item(0); // working with the first remaining element 
    $dom->removeChild($child); // remove them -- we'll reinsert relevant elements later 

    if ($child->nodeType === XML_ELEMENT_NODE) { // forget about non-element nodes (i.e. whitespace) 
     $div[$i] = $dom->createElement('div'); // create a new parent element 
     $div[$i]->appendChild($child); // stick the current ul into it 
     $div[$i]->setAttribute('id', 'd' . (++$i)); // give it an id like d1, d2, etc. 
    } 
} 

foreach ($div as $d) { 
    $dom->appendChild($d); // reinsert each div element into the DOMDocument 
} 

echo $dom->saveHTML(); // echo the processed content 

、...

関連する問題