0

ここでPHP初心者..カートにアイテムを追加した後、ユーザーが前のページにリダイレクトされる関数を作成しようとしています。ただし、以下のコードでリダイレクトされると、ディレクトリの複製が残ります(例:example.com/catalog/garden-tools/garden-tools

function custom_add_to_cart_redirect() {
    $_SERVER['REQUEST_URI_PATH'] = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
    $url = explode('/', rtrim($_SERVER['REQUEST_URI_PATH'], '/'));
    return $url[3];
}

print_rは、次のことを明らかにします。

Array ( [0] => [1] => thefarmshop [2] => catalog [3] => garden-tools [4] => gardening-glove )

問題は何でしょうか?

4

2 に答える 2

1

URLが展開されるため、次のような配列が得られます $url[ 0 ] = "http:" $url[ 1 ] = "SOME_STRING"。あなたはあなたのurl配列で必要な文字列のインデックスが何であるかをチェックしてそれを返す必要があります。のようにreturn $url[ 2 ]、またはインデックスが何であれ。

アップデート

function custom_add_to_cart_redirect() {
    $url = explode('/', substr($_SERVER['HTTP_REQUEST'], 1));
    print_r( $url );
}

は、インデックスと値を含む構造をprint_r( $array )示しています。$array

于 2012-11-10T00:35:23.313 に答える
1

このための迅速で簡単なテストは次のようになります

$uri = '/test/uri/just/cause/';
print_r(explode('/', $uri));

これはあなたが見ているのと同じものを生み出します:

Array
(
    [0] => 
    [1] => test
    [2] => uri
    [3] => just
    [4] => cause
    [5] => 
)

配列要素0が空であると表示される理由は、explodeの動作方法によるものです。文字を受け取り、その前にあるものを配列要素に貼り付け、その後にあるものを別の配列要素に貼り付けます。たとえば、1つはスラッシュ(/)の前にあり、2つは(予想どおり)後にあるため、1/2はarray(one、two)のように分割されます。

ただし、前後に何もない場合は、上記の場合のように空の要素が表示されます。

コードでは、rtrim()を使用して末尾のスラッシュをトリミングしますが、trim()を使用して先頭と末尾のスラッシュをトリミングすると、より良い結果が得られます。

$url = explode('/', trim($_SERVER['REQUEST_URI_PATH'], '/'));

あなたの帰りのために、あなたは探すかもし​​れません

return $uri[count($uri) - 2];

これにより、example.com / catalog / garden-tools/gardening-gloveから移動してgarden-toolsを返すことができます。

更新:おそらくあなたのためのより簡単な方法は次のようになります

$uri = rtrim($_SERVER['REQUEST_URI_PATH'], '/');
$uri = substr($uri, 0, strrpos($uri, '/'));

これはexample.com/catalog/garden-tools/gardening-gloveのようなパスを取り、example.com / catalog/garden-toolsを残して最後のビットを切り取ります

于 2012-11-10T04:55:56.947 に答える