Magento создает новую страницу клиента

Хорошо, я не могу понять это вообще. Я искал и ничего не могу найти. Какой лучший способ добавить новую страницу в раздел учетной записи. Я пытаюсь интегрировать систему поддержки в страницу учетной записи magento, т. Е. Чтобы использовать эту функцию, пользователь должен войти в систему и зарегистрироваться. я могу заставить это работать, используя страницу cms и пользовательский макет страницы. но тогда как мне настроить эту пользовательскую страницу cms, чтобы она работала только для зарегистрированных пользователей?

Кроме того, это показывает меню категорий, а не меню учетной записи. Как я могу получить меню моего аккаунта, чтобы показать вместо этого? или есть лучший способ сделать это? Я новичок в magento, и я действительно застрял и не могу понять это, поэтому любая помощь будет оценена.

Я работаю в сообществе magento 1.7.0.2.

3 ответа

Решение

Если я вас правильно понимаю, просто проверьте, вошел ли клиент в систему, но чтобы использовать PHP, вам придется использовать систему teplating и создать модуль, или сгенерировать свою собственную "отдельную страницу". пройти маршрут модуля:

if ($this->helper('customer')->isLoggedIn()){
   //show page contents or do whatever  .. 
}
else{
header( 'Location: http://www.yoursite.com/customer/account/login/' ) ;
}

это все, что вам нужно. Если вы идете по одиночному маршруту:

//LOAD MAGENTO
require_once 'YOUR_PATH_TO_MAGENTO/app/Mage.php';
umask(0);
Mage::app('YOUR_WEBSITE_CODE', 'website');

//GET SESSION DATA
Mage::getSingleton('core/session', array('name'=>'frontend'));
$session = Mage::getSingleton('customer/session', array('name'=>'frontend'));
$customer_data = Mage::getModel('customer/customer')->$session->id);

//CHECK IF LOGGED IN
if($session->isLoggedIn()){
echo 'Welcome ' . $customer_data->firstname . " " . $customer_data->lastname;
} else {
echo "Access Denied: Sorry, but this page is for registered members only.";
exit;
}

надеюсь, это поможет

Для любого действия есть контроллер и функция действия.

Поэтому для вашей новой функции вы определяете действие. Убедитесь, что это значение действия указано в URL.

Теперь в вашем контроллере добавьте эту функцию действия

myAction()
{
    if ($this->helper('customer')->isLoggedIn()){
   //show page contents or do whatever  .. 
    }
    else{
    header( 'Location: http://www.yoursite.com/customer/account/login/' ) ;
    }
}  

Хотя обоих приведенных выше ответов могло бы быть достаточно для опубликованного вопроса, просто для заметки, это, безусловно, неправильный способ работы с Magento, лучшее понимание того, как этого можно достичь в соответствии с практиками magento, я думаю, этот урок от Alan Storm- отличное место, однако есть некоторая проблема с методом preDispatch в этом блоге, для которого я думаю, что это может быть лучшей альтернативой:

public function preDispatch() {
        parent::preDispatch();
        if (!Mage::getSingleton('customer/session')->authenticate($this)) {
                $this->setFlag('', 'no-dispatch', true);
        }
    }

Который я получил отсюда. В блоге Алана, если клиент уже вошел в систему и пытается перейти на страницу пользовательского аккаунта, он перенаправляется на домашнюю страницу (в моем случае это было сделано).

Другие вопросы по тегам