0

必要なものに対して機能するphp関数がありますが、失敗する可能性があることがわかりました。私はmodrewriteを使用してURLを書き換えていますが、この関数を機能させるにはURLを書き換える必要があります。同じではないのに同じように書き直された2つのページがある場合、失敗する可能性があります。

この関数はURLを読み取り、/を区切り文字として使用してURLを部分に分割します。

私ができるようにしたいのは、URLに「forum」という単語が含まれているかどうか、およびクエリで次のURL部分を使用してデータベースにクエリを実行するかどうかを確認することです。

http://www.mydomain.com/forum/1/2/6のようなURLを持っているとしましょう。クエリの1と2を取得したいのですが、これはboardidとtopicidになります。最後のビットはページ番号になります。

これは書き換えられたURLで、通常はhttp://www.mydomain.com/topic.php?boardid=1&topicid=2&pagenum=6のようになりますが、関数を使用すると、/がないため分割できません。

クエリは簡単に実行できます。URLをチェックして「フォーラム」がそこにあることを確認してからクエリを実行します。URLに含まれていない場合は、通常どおり続行します。

これが私のphpブレッドクラムのコードです

function breadcrumb(
                    $home = 'Home', // Name of root link
                    $division = ' / ', // Divider between links
                    $hidextra = true, // Toggle hide/show get data and fragment in text
                    $index = false,  // Toggle show/hide link to directory if it does not contain a file
                    $indexname = 'index.php' // The definition of the file the directory must contain
        ) {

            $breadcrumb="";

            // Requested addons...
            $extension = '.php'; // Extension to cut off the end of the TEXT links
            $ifIndex = 'index.php'; // Filename of index/default/home files to not display
            // End requested addons

            $whole = $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];

            if(stristr($whole,"contact-bidder")) {
                $whole = substr($whole,0,strrpos($whole,'/'));
            }

            $parts = explode('/', $whole);
            $parts[0] = 'http://'.$parts[0];

            $array = array('-', '%20');

            $breadcrumb .=  "<a href=\"{$parts[0]}\">{$home}</a>{$division}";
            $k = 1;
            for ($i=1;$i < sizeof($parts);$i++) {
                $uri = '/';
                while ($k <= $i) {
                        $uri .= $parts[$k];
                        if ($k != (sizeof($parts)-1)) $uri .= '/';
                        $k++;
                 }
                  if (($index && is_dir($_SERVER['DOCUMENT_ROOT'].$uri) && is_file($_SERVER['DOCUMENT_ROOT'].$uri.$indexname) 
                || !$index 
                || !is_dir($_SERVER['DOCUMENT_ROOT'].$uri)) && $parts[$i] != $ifIndex) {
                    $breadcrumb .= "<a href=\"$uri\">";
                    if ($hidextra) {
                        $breadcrumb .= rtrim(preg_replace("/\?.*$/", '', ucwords(str_replace($array," ",$parts[$i]))), $extension);
                    }
                    else {
                        $breadcrumb .= rtrim(ucwords($parts[$i]), $extension);
                    }
                    $breadcrumb .= '</a>';
                }
                else {
                    $breadcrumb .= ucwords(str_replace($array," ",$parts[$i]));
                }

                  if (isset($parts[($i+1)])) {
                    $breadcrumb .= $division;
                }
                  $k = 1;
            }
            return $breadcrumb;
        }

それが不可能または簡単でない場合、私が分割できる方法はありますか?と&そして?の前にあるものだけを取得します およびafter=URL内の各変数

4

2 に答える 2

1

URL の後の変数の文字列は、クエリ文字列と呼ばれます。クエリ文字列内の変数の存在を確認する最善の方法は、$_GET 配列を調べることです。

だから...あなたが持っている場合:

http://google.com/?key=value&another_key=another_value&forum=22

次のように、変数「フォーラム」を確認します。

if (isset($_GET['forum'])){

  // 'forum' has been set in the query string, do something...

} else {

  // 'forum' has NOT been set.
}
于 2010-08-02T00:59:21.813 に答える
0

必要な方法で修正できましたが、それほど難しくはありませんでした

function breadcrumb(
                $home = 'Home', // Name of root link
                $division = ' / ', // Divider between links
                $hidextra = true, // Toggle hide/show get data and fragment in text
                $index = false,  // Toggle show/hide link to directory if it does not contain a file
                $indexname = 'index.php' // The definition of the file the directory must contain
    ) {
        global $host,$dbUser,$dbPass,$dbName;

        require_once("php/database/connection.php");
        require_once("php/database/MySQL.php");

        // Connect to the database and grab the email
        $db = & new MySQL($host,$dbUser,$dbPass,$dbName);

        $breadcrumb="";

        // Requested addons...
        $extension = '.php'; // Extension to cut off the end of the TEXT links
        $ifIndex = 'index.php'; // Filename of index/default/home files to not display
        // End requested addons

        $whole = $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];

        $parts = explode('/', $whole);
        $parts[0] = 'http://'.$parts[0];

        $array = array('-', '%20');

        $breadcrumb .=  "<a href=\"{$parts[0]}\">{$home}</a>{$division}";
        $k = 1;
        for ($i=1;$i < sizeof($parts);$i++) {
            $uri = '/';
            while ($k <= $i) {
                    $uri .= $parts[$k];
                    if ($k != (sizeof($parts)-1)) $uri .= '/';
                    $k++;
             }
              if (($index && is_dir($_SERVER['DOCUMENT_ROOT'].$uri) && is_file($_SERVER['DOCUMENT_ROOT'].$uri.$indexname) 
            || !$index 
            || !is_dir($_SERVER['DOCUMENT_ROOT'].$uri)) && $parts[$i] != $ifIndex) {
                $breadcrumb .= "<a href=\"$uri\">";
                if ($hidextra) {
                    if($parts[$i-1]=="forum") {
                        $board = substr($parts[$i],6);
                        $sql = "SELECT boardname FROM boards WHERE boardid='".$board."'";
                        $result = $db->query($sql);

                        while($row=$result->fetch()) {
                            extract($row, EXTR_PREFIX_INVALID, '_');
                            $breadcrumb .= $boardname;
                        }
                    } 
                    else if($parts[$i-2]=="forum") {
                        $topic = substr($parts[$i],10);
                        $sql = "SELECT topicname FROM topics WHERE topicid='".$topic."'";
                        $result = $db->query($sql);

                        while($row=$result->fetch()) {
                            extract($row, EXTR_PREFIX_INVALID, '_');
                            $breadcrumb .= $topicname;
                        }
                    }
                    else {
                        $breadcrumb .= rtrim(preg_replace("/\?.*$/", '', ucwords(str_replace($array," ",$parts[$i]))), $extension);
                    }
                }
                else {
                    $breadcrumb .= rtrim(ucwords($parts[$i]), $extension);
                }
                $breadcrumb .= '</a>';
            }
            else {
                $breadcrumb .= ucwords(str_replace($array," ",$parts[$i])); 
            }

              if (isset($parts[($i+1)])) {
                $breadcrumb .= $division;
            }
              $k = 1;
        }
        return $breadcrumb;
    }

前の部分が「フォーラム」だった場合、現在の部分を確認し、データベースに接続し、必要な情報を取得して、その時点でブレッドクラムにあるものを置き換える必要がありました。次のブレッドクラムも同様でした。

これで正常に動作するようになりました。

于 2010-08-02T17:58:46.313 に答える