0

opencart phpソースコードを読んでいますが、これがわかりません。「$url= $ rewrite-> rewrite($ url);」の関数rewrite()を見てください。

<?php
class Url {
    private $url;
    private $rewrite = array();

    public function link($route, $args = '', $connection = 'NONSSL') {
    ....

        foreach ($this->rewrite as $rewrite) {
            $url = $rewrite->rewrite($url);
        }
        return $url;
    }

public function addRewrite($rewrite) {
    $this->rewrite[] = $rewrite;
}
}
?>

上記のコードでエラーが発生しないのはなぜですか?
書き換え関数はクラスUrlで定義されておらず、クラスUrlは誰も拡張しませんか?しかし、それから私はより深く追跡します、関数の書き換えはseo_urlクラスにあるようです。

class ControllerCommonSeoUrl extends Controller {
    // Add rewrite to url class
    if ($this->config->get('config_seo_url')) {
        $this->url->addRewrite($this);
    }
    ...
    public function rewrite($link) {
        if ($this->config->get('config_seo_url')) {
            $url_data = parse_url(str_replace('&amp;', '&', $link));
             ....

なんで ?'Url'とこの'ControllerCommonSeoUrl'の間にまだ接続がありません。ここでいくつかの概念が欠けていますか?これらのコードを理解するにはどうすればよいですか?ここではほとんどガイダンスは必要ありません。

4

3 に答える 3

2
foreach ($this->rewrite as $rewrite) {

次の値を繰り返します。

private $rewrite = array();

また、そのUrl->rewrite配列にはのインスタンスが含まれている可能性があります。これにより、が呼び出さControllerCommonSeoUrlれる理由が説明されます。$rewrite->rewrite()ControllerCommonSeoUrl->rewrite()

また、デバッガーの使い方を学ぼうとすると、自分に有利になります:)

于 2012-11-22T11:17:01.953 に答える
0

このUrlクラスは、複数のURL書き換えメソッドを呼び出すことができる汎用クラスであり、URL書き換えコードを変更できるようにします。SEO URLコードをトリガーしてUrlクラスに追加するには、index.phpファイル内で次のようにします。

// SEO URL's
$controller->addPreAction(new Action('common/seo_url'));

そのアクションが実行されるとControllerCommonSeoUrlindex()メソッドが実行され、指定されたコードと同様に、SEOURLが設定でアクティブであるかどうかがチェックされます。そうである場合、現在のクラスがクラス内の書き換えの配列に追加されUrlます。次に、誰かが$this->url->link()各書き換えクラスを呼び出すたびに、rewrite()メソッドが呼び出され、後続のURLが返されます。

于 2012-11-22T12:02:38.957 に答える
0

コントローラがスクリプトにモデルをロードしているかどうかを確認します。ロードしている場合は、スクリプト内でモデルメソッドに簡単にアクセスできます。これは、スクリプトで$this->rewriteの場合に当てはまります。

于 2012-11-22T11:26:51.420 に答える