質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

3984閲覧

phpで特定classの範囲だけを読み込ませたいです

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/08/11 06:41

編集2017/08/11 06:46

このように書くと、「nakami.php」の『中身が全部』出力されるじゃないですか。

php

1<?php 2require('nakami.php'); 3?>

これを、
『中身が全部』ではなく
『特定のclassの中身が全部』にはできますでしょうか?

たとえば、「nakami.php」にこのように書き、

php

1<table> 2 3<tr> 4<th class="table_tabe">食べ物</th> 5<th class="table_nomi">飲み物</th> 6</tr> 7 8<tr class="tr_niko"> 9<td> 10<span class="tablerank">1</span> 11</td> 12<td> 13<span class="tablerank">2</span> 14</td> 15</tr> 16<tr class="tr_pun"> 17<td> 18<span class="tablerank">3</span> 19</td> 20<td> 21<span class="tablerank">4</span> 22</td> 23</tr> 24 25</table>

この「tr_niko」というclassの中の「tablerank」というclassだけを出力したい、というような場合です。
つまり、「1位」と「2位」だけを出力したいのです。

そのような場合は、さきほどのこちら

php

1<?php 2require('nakami.php'); 3?>

に何を書き足せばいいのか、ご教示頂ければと思い質問いたしました。
よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

的外れかもしれませんが、以下のような挙動でしょうか?
index.php

HTML

1<?php 2function getRequireContent() 3{ 4 $file = "nakami.php"; 5 if (is_file($file)) { 6 ob_start(); 7 require($file); 8 return ob_get_clean(); 9 } 10 return false; 11} 12 13$html = mb_convert_encoding(getRequireContent(), "HTML-ENTITIES", "UTF-8"); 14 15$dom = new DOMDocument(); 16$dom->loadHTML($html); 17 18$xpath = new DOMXPath($dom); 19$tableranks = $xpath->query("//span[@class='tablerank']"); 20?> 21<!DOCTYPE html> 22<html lang="ja"> 23<head> 24 <meta charset="UTF-8"> 25 <title>タイトル</title> 26</head> 27<body> 28<ul> 29 <?php foreach ($tableranks as $tablerank) { ?> 30 <li><?php echo $tablerank->nodeValue; ?></li> 31 <?php } ?> 32</ul> 33</body> 34</html>

nakami.php

HTML

1<table> 2 3 <tr> 4 <th class="table_tabe">食べ物</th> 5 <th class="table_nomi">飲み物</th> 6 </tr> 7 8 <tr class="tr_niko"> 9 <td> 10 <span class="tablerank">1位</span> 11 </td> 12 <td> 13 <span class="tablerank">2位</span> 14 </td> 15 </tr> 16 <tr class="tr_pun"> 17 <td> 18 <span class="tablerank">3位</span> 19 </td> 20 <td> 21 <span class="tablerank">4位</span> 22 </td> 23 </tr> 24 25</table>

投稿2017/08/11 07:22

s8_chu

総合スコア14731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/08/11 07:47

いつもありがとうございます! index.phpのような大元ファイルではなく、wordpressのtheme直下に置くファイルの場合ですと、どのような記述になりますでしょうか? それらしき部分を消してみたりした(つもり)なのですが、どうも何も表示されず、、 素人でキャッチボールできずすみませんです。
s8_chu

2017/08/11 08:07

> index.phpのような大元ファイルではなく、wordpressのtheme直下に置くファイルの場合ですと、どのような記述になりますでしょうか? 申し訳ありませんが、WordPressは触れたことがないのでわかりません。 WordPressでやらなければならないのであれば、WordPressに詳しい回答者に回答してもらうために別途質問することをお勧めします。
退会済みユーザー

退会済みユーザー

2017/08/11 09:41

あちゃ、失礼致しました!wordpressタグをつけておくべきでした。。 でもも少しこちらの方法でできるように考えてみます。 ありがとうごいます!
guest

0

ベストアンサー

■参照元ファイル

<?php if ($class_zenbu == 'zenbu'): ?> <span class="zenbu"> 1 </span> <?php endif; ?> <?php if ($class_zenbu == 'zenbu' || $class_hitotsu == 'hitotsu'): ?> <span class="hitotsu"> 2 </span> <?php endif; ?> <?php if ($class_zenbu == 'zenbu'): ?> <span class="zenbu"> 3 </span> <?php endif; ?>

■2だけ出力の場合

<?php $class_hitotsu = 'hitotsu'; include('nakami.php'); ?>

■123出力の場合

<?php $class_hitotsu = 'hitotsu'; $class_hitotsu = 'zenbu'; include('nakami.php'); ?>

投稿2017/08/12 01:40

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

htmlのデータありき、ということならsimple_html_domとかを使って
目的の要素を抽出というような方法をとることになると思いますが
あれはものすごく処理が重いです、
ユーザーアクセス毎に走る処理の中での使用は避けたいです

phpもこちらの編集の範囲にあるならば出力を動的にするのが筋と思います

php

1<?php 2$to_show='nico'; 3require('nakami.php'); 4?>

php

1<? 2$data=array( 3 'nico'=>array('1位','2位'), 4 'pun'=>array('3位','4位') 5); 6?> 7 8<table> 9 <tr> 10 <th class="table_tabe">食べ物</th> 11 <th class="table_nomi">飲み物</th> 12 </tr> 13 <tr class="tr_<?=$to_show?>"> 14 <? vprintf(' 15 <td><span class="tablerank">%s</span></td> 16 <td><span class="tablerank">%s</span></td> 17 ',$data[$to_show]); ?> 18 </tr> 19</table>

投稿2017/08/11 07:10

編集2017/08/11 08:09
KazuhiroHatano

総合スコア7804

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/08/11 07:37 編集

ありがとうございます。そうですね、重くなってしまうのは避けたいです。ご指摘感謝です。 ところでそちらのコードですけれど、なんだかこんな風に出力されてしまいました。( ノД`) https://www.fastpic.jp/images.php?file=3723203835.jpg あと、そちらですと「nakami.php」の『中身が全部』出力されてしまいませんでしょうか? 『nicoのtablerankの部分』(または『punのtablerank部分』)だけでいいのですが、、(>_<)
退会済みユーザー

退会済みユーザー

2017/08/11 08:01 編集

<?を<?phpにしてみました。 今度は「食べ物」「飲み物」だけが表示されました。。 尚、そのときの出力はこうでした。 <table> <tr> <th class="table_tabe">食べ物</th> <th class="table_nomi">飲み物</th> </tr> <tr class="tr_<?php=$to_show?>"> むむ~。謎です。
KazuhiroHatano

2017/08/11 08:11

タイポ訂正と、多分そのエラーが出るってことはPHP ~5.2ですね? ってことで配列リテラル表記を修正しました <?= は <?php echo の略みたいなもんです
退会済みユーザー

退会済みユーザー

2017/08/11 09:41

できました! こちらの方法は「抽出して表示する」ではなく「一部を表示する」ですね。 実は「nakami.php」と「表示するファイル」はかなり表の構成が違っておりますので、こちらの方法だとできなそうです。。 ううむ、苦労して作ったのに、残念。 でもよいヒントをありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問