0

これは奇妙な問題のようです。多分それは間違ったアプローチでもあります。しかし、私はこれをしなければなりません:

  • ページにいくつかのメニュー項目があります
  • 各ページのコンテンツはいくつかの.phtmlファイルに保存されます
  • ページが読み込まれると、デフォルトのコンテンツが表示されます(を使用require
  • 他のすべてのコンテンツもロードする必要があり、JavaScript 配列に保存する必要があります
  • ユーザーがリンクをクリックすると、コンテンツが交換されます

問題は:

  • AJAX は使用しないでください
  • 古き良きSEOのために、すべてのコンテンツを最初に追加することはできません

以下を除いて、すべての部分は簡単です: JavaScript 配列にコンテンツを取得する方法。JavaScriptcontent.push('<?php print require 'page.phtml'; ?>');では機能しない複数行の文字列を返すため、もちろん機能しません。すべてのアイデアを歓迎します。多分私は非常に単純なものを見落としています。

4

3 に答える 3

4
<script>
<?php

ob_start();
require 'page.phtml';
$contents = ob_get_clean();

echo "var content = ".json_encode($contents);
?>
</script>

ファイルにphpコードがない場合は、page.phtmlさらに簡単にすることができます

<script>
<?php
echo "var content = ".json_encode(file_get_contents('page.phtml'));
?>
</script>

明らかに、この方法でも使用できます。

echo "content.push(".json_encode($contents).");";

なぜ機能しないのか

<?php
function json_require($filepath) {
  ob_start();
  require($filepath);
  return json_encode(ob_get_clean());
}
?>
...
content.push(<?=json_require('page_1.phtml');?>);
content.push(<?=json_require('page_2.phtml');?>);
content.push(<?=json_require('page_3.phtml');?>);
content.push(<?=json_require('page_4.phtml');?>);
于 2012-08-25T09:28:49.510 に答える
0

js配列を使用するよりも隠しdivを使用できます。ページの最後で、seoに影響を与えないようにします。次に、これらの div ID を使用してコンテンツを交換します。

単純なjsでもこれができない場合は、jQueryを使用してください。

詳しく説明させてください

<script>
function shouldBeCalledAtSomeEvent(page_id)
{
   var html = $('#'+page_id+').html();
   $('#idOfYourTargetElem').html(html)
}
</script>

<!-- end of your main file -->
<div style="display:none" id="page_1">
include('page_1.phtml');
</div>

<div style="display:none" id="page_2">
include('page_2.phtml');
</div>

<div style="display:none" id="page_3">
include('page_3.phtml');
</div>
于 2012-08-25T09:29:09.853 に答える
-1

ajax を使用できず、seo が心配な場合は、@rupesh の回答の修正版を使用することをお勧めします。html をスクリプト タグに保存して、js がアクセスでき、クローラーが読み取らないようにします。

<script type="text/hidden-menu" class="hidden_menu" >
    include('page_1.phtml');
</script>
<script type="text/hidden-menu" class="hidden_menu" >
    include('page_2.phtml');
</script>
<script type="text/hidden-menu" class="hidden_menu" >
    include('page_3.phtml');
</script>

そして、配列を js で簡単に構築できます。

var content = [],
    contentNodes = document.getElementsByClassName('hidden_menu'),
    i=0;
for(;i<contentNodes.length;i++)
   content.push(contentNodes[i].innerHTML);    

そして出来上がり: ajax を使用せず、seo に影響を与えることなく、php から送信された html を保持するコンテンツ配列があります。

于 2012-08-25T09:41:33.153 に答える