Автор Тема: Учётная запиь в футере или "Войти"  (Прочитано 160 раз)

21 Декабря 2015, 16:56:13
  • Фрилансер
  • *
  • Сообщений: 129
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Доброго времени.

Престашоп 1.6

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

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

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

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

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

21 Декабря 2015, 18:53:36
Ответ #1
  • Ветеран
  • *****
  • Сообщений: 2149
  • Репутация: +49/-4
  • Сообщество PrestaShop
    • Просмотр профиля
В стандарной теме так делает модуль blockmyaccountfooter.
22 Декабря 2015, 14:13:13
Ответ #2
  • Фрилансер
  • *
  • Сообщений: 129
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Nikola
Знакомо. Этот модуль создаёт колонку
Моя учетная запись

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

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

Это не принципиально, просто соображение по улучшению, субъективный взгляд.
22 Декабря 2015, 14:36:18
Ответ #3
  • Ветеран
  • *****
  • Сообщений: 2149
  • Репутация: +49/-4
  • Сообщество PrestaShop
    • Просмотр профиля
Так добавь код как здесь
{if $is_logged}
зарегистрирован
{else}
нет
{/if}
23 Декабря 2015, 13:55:11
Ответ #4
  • Фрилансер
  • *
  • Сообщений: 129
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
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>


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


23 Декабря 2015, 14:13:10
Ответ #5
  • Ветеран
  • *****
  • Сообщений: 105576
  • Репутация: +39545/-0
    • Просмотр профиля
    • Webstudio UwK
Любую переменную 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
24 Декабря 2015, 11:27:55
Ответ #6
  • Фрилансер
  • *
  • Сообщений: 129
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Дело в том, что  блок переменных, где следует объявить 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.
24 Декабря 2015, 12:53:08
Ответ #7
  • Ветеран
  • *****
  • Сообщений: 85943
  • Репутация: +25399/-0
  • Сообщество PrestaShop
    • Просмотр профиля
У вас задача вывести шаблон в футере, а не в левой колонке. Поэтому вам не нужен
hookDisplayLeftColumn($params)использовать нужно
hookDisplayFooter($params)
24 Декабря 2015, 14:06:21
Ответ #8
  • Фрилансер
  • *
  • Сообщений: 129
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
По моему, проще 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 всё ОК, авторизованным - имя, не авторизованным - "Войти"
25 Декабря 2015, 00:00:31
Ответ #9
  • Ветеран
  • *****
  • Сообщений: 13118
  • Репутация: +14553/-0
  • Сообщество PrestaShop
    • Просмотр профиля
В установку модуля
public function install()
{
return (parent::install() && $this->registerHook('displayFooter')
В самом хуке изменить шаблон
public function hookDisplayFooter($params)
{
...
    eturn $this->display(__FILE__, 'blockuserinfo-footer.tpl');
и добавить шаблон blockuserinfo-footer.tpl
26 Декабря 2015, 12:39:09
Ответ #10
  • Фрилансер
  • *
  • Сообщений: 129
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Adik
Спасибо, получилось!

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

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