Учётная запиь в футере или "Войти"

Автор BSD-shnik, 21 декабря 2015, 16:56:13

« назад - далее »

BSD-shnik

Доброго времени.

Престашоп 1.6

Хочу поинтересоваться, как сделать так, чтоб если п-тель не авторизован, в футере отображать "Войти" , а если авторизован - линки из учётки.
Сейчас авторизованным в футере отображается список разделов учётки, не авторизованным - пустое место.  Не эстетично как то.....

Используется модуль blockmyaccount,  hook - displayfooter

Что изменить в модуле? Типа 

{if $cms->id == '.....'}
...
{/if}


Или как?  Но как програмно определить авторизован или нет?


Миколас

В стандарной теме так делает модуль blockmyaccountfooter.

BSD-shnik

Nikola
Знакомо. Этот модуль создаёт колонку
Моя учетная запись

    Мои заказы
    Мои платёжные квитанции
    Мои адреса
    Моя личная информация


И если п-тель не авторизован, то он по любой ссылке попадает на ст-цу аутентификации. Но колонка присутствует так или иначе.  Мне же нужно, чтоб колонка появлялась только когда п-тель авторизован.  А для гостей хотелось бы видеть ссылку типа "Войти" или картинку.....   
Сейчас для этой цели blockmyaccount, но для неавторизованного нет ничего, просто белое поле.

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

Миколас


BSD-shnik

#4
Nikola

Лучше так:
blockmyaccount.tpl

{if $logged}
                <a href="{$link->getPageLink('my-account', true)|escape:'html'}" title="{l s='View my customer account' mod='blockuserinfo'}" class="account" rel="nofollow">
                <span>{$cookie->customer_firstname} {$cookie->customer_lastname}</span></a>
           {else}
                        <a href="{$link->getPageLink('my-account', true)|escape:'html'}" title="{l s='Log in to your customer account' mod='blockuserinfo'}" class="login" rel="nofollow">{l s='Sign in' mod='blockuserinfo'}</a>

            {/if}


Подсмотрел в blockuserinfo. отображает п-теля (имя и фамилию)  Только почему то условие "else" не обрабатывается. Если не зарегистрированный, белое поле.

И такая конструкция тоже не обрабатывается - вместо линков просто белое поле, ошибок нет

{if !$logged}
<a href="{$link->getPageLink('my-account', true)|escape:'html'}" title="{l s='Log in to your customer account' mod='blockuserinfo'}" class="login" rel="nofollow">{l s='Sign in' mod='blockuserinfo'}</a>
{/if}




Весь модуль выглядет так:

<div class="block myaccount-column">

<p id="header_user_info">

        <p class="title_block" >


{if $logged}
                <a href="{$link->getPageLink('my-account', true)|escape:'html'}" title="{l s='View my customer account' mod='blockuserinfo'}" class="account" rel="nofollow">
                <span>{$cookie->customer_firstname} {$cookie->customer_lastname}</span></a>
{else}
                        <a href="{$link->getPageLink('my-account', true)|escape:'html'}" title="{l s='Log in to your customer account' mod='blockuserinfo'}" class="login" rel="nofollow">{l s='Sign in' mod='blockuserinfo'}</a>
{/if}
</p>

        <div class="block_content list-block">
                <ul>
                        <li class="link">
                                <a href="{$link->getPageLink('history', true)|escape:'html':'UTF-8'}" title="{l s='My orders' mod='blockmyaccount'}">
                                        {l s='My orders' mod='blockmyaccount'}
                                </a>
                         </li>

                        {if $returnAllowed}
                                <liclass="link">
                                        <a href="{$link->getPageLink('order-follow', true)|escape:'html':'UTF-8'}" title="{l s='My merchandise returns' mod='blockmyaccount'}">
                                                {l s='My merchandise returns' mod='blockmyaccount'}
                                        </a>
                                </li>
                        {/if}
                        <li class="link">
                                <a href="{$link->getPageLink('order-slip', true)|escape:'html':'UTF-8'}" title="{l s='My credit slips' mod='blockmyaccount'}">  {l s='My credit slips' mod='blockmyaccount'}
                                </a>
                        </li>
                        <li class="link">
                                <a href="{$link->getPageLink('addresses', true)|escape:'html':'UTF-8'}" title="{l s='My addresses' mod='blockmyaccount'}">
                                        {l s='My addresses' mod='blockmyaccount'}
                                </a>
                        </li>

<li class="link">
                                <a href="{$link->getPageLink('identity', true)|escape:'html':'UTF-8'}" title="{l s='My personal info' mod='blockmyaccount'}">
                                        {l s='My personal info' mod='blockmyaccount'}
                                </a>
                        </li>
                        {if $voucherAllowed}
                                <li class="link">
                                        <a href="{$link->getPageLink('discount', true)|escape:'html':'UTF-8'}" title="{l s='My vouchers' mod='blockmyaccount'}">
                                                {l s='My vouchers' mod='blockmyaccount'}
                                        </a>
                                </li>
                        {/if}
                        {$HOOK_BLOCK_MY_ACCOUNT}
                </ul>

<!-- Кнопка Выход -->

<div class="logout">

                        <a
                        class="btn btn-default button button-small"
                        href="{$link->getPageLink('index', true, NULL, "mylogout")|escape:'html':'UTF-8'}"
                        title="{l s='Sign out' mod='blockmyaccount'}">
                                <span>{l s='Sign out' mod='blockmyaccount'}<i class="icon-chevron-right right"></i></span>
                        </a>
                </div>
        </div>
</div>



Впечатление, что если юзер не залогился, модуль вообще не обрабатывается...... но почему?



Виталий

Любую переменную smarty перед использованием нужно определить в основном файле модуля.
$this->smarty->assign(array(
    'logged' => $this->context->customer->isLogged(),
    'firstName' => ($this->context->customer->logged ? $this->context->customer->firstname : false),
    'lastName' => ($this->context->customer->logged ? $this->context->customer->lastname : false),
Cоздание интернет сайтов Webstudio UwK

BSD-shnik

Дело в том, что  блок переменных, где следует объявить logged,  включен в функцию:

  public function hookDisplayLeftColumn($params)
        {
                if (!$this->context->customer->isLogged())
                        return false;

                $this->smarty->assign(array(
                        'voucherAllowed' => CartRule::isFeatureActive(),
                        'returnAllowed' => (int)Configuration::get('PS_ORDER_RETURN'),
                        'HOOK_BLOCK_MY_ACCOUNT' => Hook::exec('displayMyAccountBlock'),
                ));
                return $this->display(__FILE__, $this->name.'.tpl');
        }



Поэтому, если п-тель не авторизован, возвращается false

Пришёл к выводу, что лучше написать доп.модуль, который будет работать наоборот, то есть отображать картинку или кнопку "Войти", если п-тель не авторизован.

Но я делаю первые шаги в PHP..... надеюсь с вашей помощью решить задачку.  Тем и хороши сообщества, что можно решать задачи сообща. Вы пишете на PHP, я на shell.

DarinSr

У вас задача вывести шаблон в футере, а не в левой колонке. Поэтому вам не нужен
hookDisplayLeftColumn($params)
использовать нужно
hookDisplayFooter($params)

BSD-shnik

По моему, проще blockuserinfo вставить в футер, рядом с blockmyaccount. Тогда "Войти" будет отображаться не авторизованным, а авторизованным имя и фамилия рядом с линками  blockmyaccount. В принципе, это бы устроило. НО blockuserinfo в футере не отображается.

Добавил в blockuserinfo.php 
public function hookDisplayFooter($params)
        {
                 if (!$this->active)
                        return;

                $this->smarty->assign(array(
                       
                        'logged' => $this->context->customer->isLogged(),
                        'customerName' => ($this->context->customer->logged ? $this->context->customer->firstname.' '.$this->context->customer->lastname : false),
                        'firstName' => ($this->context->customer->logged ? $this->context->customer->firstname : false),
                        'lastName' => ($this->context->customer->logged ? $this->context->customer->lastname : false),
                        'order_process' => Configuration::get('PS_ORDER_PROCESS_TYPE') ? 'order-opc' : 'order'
                ));
                return $this->display(__FILE__, 'blockuserinfo.tpl');

        }


Не отображается модуль.  Хотя в hookDisplayTop всё ОК, авторизованным - имя, не авторизованным - "Войти"

Adik

В установку модуля
public function install()
{
return (parent::install() && $this->registerHook('displayFooter')

В самом хуке изменить шаблон
public function hookDisplayFooter($params)
{
...
    eturn $this->display(__FILE__, 'blockuserinfo-footer.tpl');

и добавить шаблон blockuserinfo-footer.tpl

BSD-shnik

#10
Adik
Спасибо, получилось!

Искал в гугле, читал буржуйское и наше..... но здесь всё просто и без лишнего пиара.
Теперь расположу как надо, заполню translations и получу аккуратный, эстетичный, удобный для п-теля вариант. :)

Всех благодарю за помощь!