Чт. Май 16th, 2024

Как сделать закрытую или приватную страницу для определенной группы пользователей интернет-магазина на Shop-Script

Выполняя один из своих заказов, мне нужно было сделать закрытую страницу для партнёров в интернет-магазине на движке Shop-Script, причем она должна была быть не в личном кабинете.

Готового решения для этой, казалось бы, простой задачи я не нашел ни в настройках, ни в каталоге плагинов.

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

Для начала нужно описать логику: Страница будет доступна только тем, кто залогинен на сайте и принадлежит определенной группе. Причем заказчик хотел выкладывать на этой странице оптовые прайсы, которые не должны распространяться «для всех». По этому аккаунты партнеров должны добавлять в группу в ручную, после проверки.

Выглядит в админ-панели Shop Script это примерно так:

админ-панель shop-script

Так же нужно сразу узнать id этой группы. Сделать это просто, он виден в URL этой самой группы.

Id группы Shop-Script

Далее создаем приватную страницу, если она ещё не создана. Для этого заходим в Магазин → Витрина → Страницы. В моём случае я создал страницу «Партнёрам» с URL myshop.ru/partners

создаем страницу Shop-Script

Пока эта страница является обычной, т.е. На неё может зайти любой посетитель интернет-магазина. Чтобы страница стала закрытой для всех, кроме определенной группы пользователей нужно найти и отредактировать файл page.html в папке с используемой темой.

Обычно он располагается по адресу /wa-data/public/shop/themes/вашатема/page.html. Код нужно добавить в самое начало файла, перед уже имеющимся «стандартным». Поскольку этот файл отвечает за вывод вообще всех страниц, я сделал проверку на URL, чтобы отсекать дальнейшую проверку на всех остальных страницах.

{if $wa→currentUrl()|strstr:"partners/"}

Если адрес соответствует нашей странице (/partners), то начинаем проверку на принадлежность зашедшего пользователя к нужной нам группе с ID=2.

{if in_array(2, shopCustom::getContactCategoryIds($wa->user('id')))}
    {* $subpages = $wa->shop->pages($page.id)}
{if $subpages}
    <ul class="sub-links">
        {foreach $subpages as $p}
            <li><a href="{$p.url}">{$p.name}</a></li>
        {/foreach}
    </ul>
{/if *}<div id="page" role="main">
    {$page.content}
</div></div></div>
{else}
    <p>Этот раздел только для партнёров.</p> 
        <p>Если Вы видите это сообщение и являетесь нашим партнёром, пожалуйста, свяжитесь с нами.</p>
{/if}{else}

Если пользователь принадлежит группе Партнёры, то показываем ему контент , если нет — то показываем сообщение «Этот раздел только для партнёров. Если Вы видите это сообщение и являетесь нашим партнёром, пожалуйста, свяжитесь с нами.»

Целиком файл page.html у меня выглядит так:

{if $wa->currentUrl()|strstr:"partners/"}
<h1>{$page.name}</h1>
{if in_array(2, shopCustom::getContactCategoryIds($wa->user('id')))}
    {* $subpages = $wa->shop->pages($page.id)}
{if $subpages}
    <ul class="sub-links">
        {foreach $subpages as $p}
            <li><a href="{$p.url}">{$p.name}</a></li>
        {/foreach}
    </ul>
{/if *}<div id="page" role="main">
    {$page.content}
</div></div></div>
{else}
    <p>Этот раздел только для партнёров.</p> 
        <p>Если Вы видите это сообщение и являетесь нашим партнёром, пожалуйста, свяжитесь с нами.</p>
{/if}{else}
<h1>{$page.name}</h1>{* $subpages = $wa->shop->pages($page.id)}
{if $subpages}
    <ul class="sub-links">
        {foreach $subpages as $p}
            <li><a href="{$p.url}">{$p.name}</a></li>
        {/foreach}
    </ul>
{/if *}<div id="page" role="main">
    {$page.content}
</div></div></div>
{/if}

Добавить комментарий