Как удалить страницу заказов и возвратов Magento - PullRequest
2 голосов
/ 09 марта 2012

Magento 1.6+ создает страницу «Заказы и возвраты» (www.yourstore.com/sales/guest/form/) и размещает ссылку на нее в нижнем колонтитуле.

Удалить ссылку в нижнем колонтитуле легко, добавив обновление макета в local.xml ( см. Этот ответ stackoverflow ).

Но страница все еще существует, может быть проиндексирована Google и должна быть удалена. Как удалить эту страницу Magento по умолчанию через код?

EDIT: Я хочу уточнить, что я не ищу перенаправления, переписывания или ответа типа 404. Я ищу способ буквально удалить или переопределить любую функциональность, которая создает эту страницу, чтобы она никогда не создавалась. Моя теория состоит в том, что если существует функциональность для его создания, то должен быть метод для удаления этой функциональности. Я знаю, что есть и другие способы скрытия URL-адресов с помощью переписывания и т. Д. Но мне кажется, что предпочтительным способом является не создавать нежелательные страницы, а затем скрыть их позже. Я думаю, что у Magento есть какой-то способ не создавать страницы, которые он создает. Аналогично тому, как local.xml может удалять блоки нежелательного кода. Существует ли подобный метод предотвращения нежелательных страниц, создаваемых в первую очередь?

Ответы [ 3 ]

3 голосов
/ 09 марта 2012

Самый простой способ сделать это - использовать перезапись URL, чтобы перенаправить запрос на страницу 404 Magento.В своем файле .htaccess добавьте следующие две строки после RewriteEngine on и перед другими правилами перезаписи:

RewriteCond %{REQUEST_URI} ^/sales/guest/form
RewriteRule .* errors/404.php

Если вам нужно удалить эту функцию только с одного сайта, вы можете заключить ее вСинтаксис Apache <If> выглядит следующим образом:

<If "%{HTTP_HOST} != 'www.example.com'">
    RewriteCond %{REQUEST_URI} ^/sales/guest/form
    RewriteRule .* errors/404.php
</If> 

Если вы предпочитаете делать это с PHP-кодом, другие альтернативы включают переопределение класса Mage_Sales_GuestController для возврата перенаправления на страницу 404.Или вы можете манипулировать маршрутизаторами, чтобы удалить URL из таблицы маршрутизации до того, как произойдет маршрутизация.Оба они намного сложнее и сложнее, чем решение .htaccess.

2 голосов
/ 10 марта 2012

Вы можете использовать метод local.xml, чтобы заменить содержимое страницы / sales / guest / form / page чем-то другим. Например, вы можете поместить эту ручку туда ...

<sales_guest_form>
  <reference name="content"> 
    <!-- Remove the main content of the page, which is the form -->
    <remove name="guest.form" />
    <!-- Optionally you can add in your own block or set of blocks. Not sure I would though -->
    <block type="yourmodlulealias/some_class" template="whatever/template.phtml" /> 
  </reference>
</sales_guest_form>

Это просто удалит всю гостевую форму и заменит ее блоком по вашему выбору. Черт возьми, тебе даже не нужно добавлять в свой блок.

Другая идея заключается в создании наблюдателя, который прослушивает событие controller_action_predispatch_sales_guest_form и просто перенаправляет его всякий раз, когда он срабатывает. Это событие вызывается до того, как произойдет основная обработка этой страницы. Так что в файле config.xml, вероятно, будет что-то похожее на это ...

        <controller_action_predispatch_sales_guest_form>
            <observers>
                <seo_redirect>
                    <type>singleton</type>
                    <class>yourmodulealias/observer</class>
                    <method>redirectRequest</method>
                </seo_redirect>
            </observers>
        </controller_action_predispatch_sales_guest_form>

и тогда ваш класс наблюдателя будет выглядеть примерно так ...

class Yourcompany_Yourmodulename_Model_Observer {
  public function redirectRequest($observer){
    header("Location: " . Mage::getUrl() . 'someplace-else');
  }
}

Если вам не нравится идея перенаправления, вы можете сойти с ума и выйти:)

Edit: Если вы абсолютно уверены, что эта страница не существует, то, возможно, вы можете просто вернуть статус 404. Когда веб-сервер получает запрос на документ, который не существует на сервере, он обычно возвращает 404. Другими словами, 404 означает, что документ не существует. Для этого вы могли бы использовать идею наблюдателя сверху и просто заменить перенаправление выше на:

class Yourcompany_Yourmodulename_Model_Observer {
  public function redirectRequest($observer){
    Mage::app()->getResponse()->setHeader('HTTP/1.1','404 Not Found');
    Mage::app()->getResponse()->setHeader('Status','404 File not found');
    exit;
  }
}

Когда вы нажимаете на страницу в вашем браузере, она будет полностью пустой, и в заголовке http будет указано, что это 404, не найден. Другой аналогичный подход - сделать так, чтобы отображалась страница 404 по умолчанию в Magento. Я не делал этого раньше, но я предполагаю, что вам сначала нужно переопределить контроллер (app / code / core / Mage / Sales / controllers / GuestController) (посмотрите, как переопределить контроллеры, если вы не знакомы, это отличается от переопределения моделей и блоков). Вы просто переопределите функцию formAction () в этом классе. Вероятно, это будет примерно так:

public function formAction()
{
  $this->getResponse()->setHeader('HTTP/1.1','404 Not Found');
  $this->getResponse()->setHeader('Status','404 File not found');
  $this->loadLayout();
  $this->renderLayout();
}

Наряду с этим изменением вы захотите обновить дескриптор макета в файле local.xml, чтобы он выглядел как дескриптор (который находится в файле макета cms.xml). Так это будет выглядеть примерно так:

<sales_guest_form> 
    <remove name="right"/>
    <remove name="left"/>

    <reference name="root">
        <action method="setTemplate"><template>page/1column.phtml</template></action>
    </reference>
    <reference name="content">
        <block type="core/template" name="default_no_route" template="cms/default/no-route.phtml"/>
    </reference>
</sales_guest_form>

Опять же, я не проверял этот последний подход, но он должен работать просто отлично. Нажав http://yousite.com/sales/guest/form, вы попадете на ту же страницу Magento 404, как если бы вы перешли на другой несуществующий URL, такой как http://yoursite.com/some-non-existent-url.

1 голос
/ 13 марта 2012

Публикация в качестве другого ответа, потому что это слишком долго для комментария ...

Все, что не существует в виде файла (например, js / css. И т. Д.), Переписывается .htaccess будет перенаправлять через процесс обработки запросов Magento (начиная с index.php) Таким образом, любой URL, например sales / guest / form, попадет в обработчик запросов Magento независимо от того, определен он Magento или нет. В этот момент, если он соответствует действию контроллера Magento или может быть перенаправлен на контроллер Magento, Magento генерирует соответствующую страницу. Если URL не может быть преобразован в действие контроллера, Magento генерирует страницу 404.

Следовательно, любое решение, которое дает результат 404 и не позволяет запускать действие контроллера, функционально аналогично «удалению» страницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...