Категории

[FAQ] Часто задаваемые вопросы и ответы

Проблемы и решения

Ошибки и исправления

Общие вопросы

Расширения

Установка и обновление

Модули

Шаблоны

Локализация интерфейса

Коммерческие предложения

Учимся бизнесу

Бизнес книги

Поисковая оптимизация (SEO)

Магазины на ShopOS

Хостинг для ShopOS

Предложения и пожелания

Курилка

Мои пожелания...

Евгений, почему бы не почистить шаблоны от лишних файлов?
НАпример файлы featured_products_default.html и new_products_default.html
по сути одинаковы, да и не только они. Если так пройтись по файлам шаблонов, то можно смело сократить их количество до половины.

Или например объединить файлы: логина, восстановления пароля и выхода, в один. Поставить условие на вывод через смарти.

Конечно хотелось бы еще и вынести весь HTML в шаблоны из кода.
например выпадающее меню в поиске. приходится лазить в файл и править))
Или блоки. Блок категорий как-то оптимизировать. Кушает запросов много, да и править его не удобно. Нет возможности для человека не знающего PHP что-то там реализовать нормально.

+ Конечно сделать возможность вывода различной информации в товарах.
Например теже доп.поля, производителя и т.д.. т.е. сделать так, чтобы можно было без особых заморочек выводить что нужно. Я заказывал вывод поп. полей в карточках  товаров и в списках и т.д.. Не оч удобно потом обновлять все это дело ;D

В общем надеюсь что ни я один такой. Делать шаблоны под шопос конечно не трудно, но файлов править.... и времени уходит много.

Надеюсь, что когданить, что-то из этого будет в новом релизе))

С уважением, вечный поклонник шопоса ;)


Евгений, почему бы не почистить шаблоны от лишних файлов?
НАпример файлы featured_products_default.html и new_products_default.html
по сути одинаковы, да и не только они. Если так пройтись по файлам шаблонов, то можно смело сократить их количество до половины.


можно. но возникнут проблемы, если нужно будет подправить разные страницы, на которыек установлен один шаблон


Или блоки. Блок категорий как-то оптимизировать. Кушает запросов много, да и править его не удобно.


это уже сделано. 2 запроса на блок категорий вместо тысяч

в этом месяце выйдет обновление.


можно. но возникнут проблемы, если нужно будет подправить разные страницы, на которыек установлен один шаблон

Ну вот  эт будет уже не проблема. Тогда уже можно будет просто указать другой шаблон в php файле. как сейчас сделано, что переменные передаются в определенные файлы шаблона. Или опять же использовать предопределение вывода через смарти. в IF засунуть и все. ну или придумать, что-то.
просто так было бы намного проще работать со скриптом. 100 файлов шаблонов эт много ;D

в этом месяце выйдет обновление.

Вот это отличная новость!


А какие изминения ожидаются в обновлении?


Еще что в будущих версиях оптимизировать, так это заголовки в боксах.
Сделать их одинаковые. Там же все равно можно указывать секцию.... например section="affiliate_box", сделать, чтобы заголовок был не {#heading_affiliate#} а {#heading_box#}.

Кстати, можно что-то сделать с input, textarea etc...? Как-то вынести их в шаблон, чтобы можно было при необходимости назначать им классы. А то сейчас нужно каждый {$FIELD_...} пихать в span. Или проще вообще вместо картинок них использовать текст. тогда не нужно будет рисовать кучу кнопок. достаточно будет только CSS.



Еще что в будущих версиях оптимизировать, так это заголовки в боксах.
Сделать их одинаковые. Там же все равно можно указывать секцию.... например section="affiliate_box", сделать, чтобы заголовок был не {#heading_affiliate#} а {#heading_box#}.

Кстати, можно что-то сделать с input, textarea etc...? Как-то вынести их в шаблон, чтобы можно было при необходимости назначать им классы. А то сейчас нужно каждый {$FIELD_...} пихать в span. Или проще вообще вместо картинок них использовать текст. тогда не нужно будет рисовать кучу кнопок. достаточно будет только CSS.


По блоках, можна и самому править, так как все блоки в шаблоне формируютса. Есть возможность даже зделать один шаблон для всех боксов.

По CSS согласен на все 100. Зачем нужна куча кнопок, если есть возможность вывести текст и потом уже формировать кнопки как душе угодно.

У меня еще такая претензия имеется, зачем в добавлении товара есть два поля добавления описания, не проще при выводе описания в блоках и листинге обрезать полное описание


По блоках, можна и самому править, так как все блоки в шаблоне формируютса. Есть возможность даже зделать один шаблон для всех боксов.

Нет. Тут нужно именно лег файлы править и шаблоны боксов.
В принципе я могу поправить и скинуть Евгению, если он не против ;)

У меня еще такая претензия имеется, зачем в добавлении товара есть два поля добавления описания, не проще при выводе описания в блоках и листинге обрезать полное описание

Обрезать можно и в шаблоне.
Убирать не нужно. Например есть товары к которым нужно только полное описание, а у некоторых и полное и краткое.


У меня еще такая претензия имеется, зачем в добавлении товара есть два поля добавления описания, не проще при выводе описания в блоках и листинге обрезать полное описание


краткое описание не всегда равно части полного описания.  :)


По CSS согласен на все 100. Зачем нужна куча кнопок, если есть возможность вывести текст и потом уже формировать кнопки как душе угодно.


надо сделать и то и другое. тоесть простое переключение с css на кнопки-картинки.

иногда проще картинку подправить :)


Евгений, почему бы не почистить шаблоны от лишних файлов?
НАпример файлы featured_products_default.html и new_products_default.html
по сути одинаковы, да и не только они. Если так пройтись по файлам шаблонов, то можно смело сократить их количество до половины.


а что делать если эти шаблоны нужно сделать разными?

можно на лету проверять какие шаблоны есть, каких нет - и замещать шаблоны, которых нет - похожими шаблонами.


надо сделать и то и другое. тоесть простое переключение с css на кнопки-картинки.

Это будет пожалуй лишним. Картинку итак можно в input засунуть. Т.е. кому нужно тот картинку поставит
Для всех кнопок можно использовать один стиль, который написать за минуту + фоновую картинку + можно hover добавить.

иногда проще картинку подправить

А тогда вообще отпадет надобность в картинках.


а что делать если эти шаблоны нужно сделать разными?

можно на лету проверять какие шаблоны есть, каких нет - и замещать шаблоны, которых нет - похожими шаблонами.

Вот тут нужно продумать эту систему.
Я собственно имел ввиду объединить файлы некоторые. Как например сделано в latest_news.html
Если мы смотрим конкретную новость, то у нас условие {if $ONE eq 1}одна новость{else}список{/if}
Вот к примеру вывод товаров
new_products_default.html
и
featured_products_default.html
объединить в
listing_product_default.html.

Или для удобвства можно еще раскидать по папкам файлы.
Партерка в папку modules/affiliate
Аккаунт в modules/account
и т.д...


Еще вот что подумал.
В некоторых скриптах видел. И кстати очень удобно.

На главной панели админа есть поле, в это поле админ может написать, что угодно. Т.е. оставить для себя заметку. Зачем? За тем, что бывает нужно иногда записать к примеру фамилию покупателя или номер товара, чтобы на утро, что-то с этим сделать. Можно конечно записать где угодно, но в админке это было бы быстрее и практичнее.

Если углубиться в функционал, то можно было бы сделать два поля. одно общее и одно чисто для админа.
Удобно когда в магазе работает несколько админов.

Еще удобнее, если бы сохранение было реализовано на AJAX. У некоторых моих клиентов например инет очень медленный и дорогой.

В реализации я не думаю, что будет сложно.


Кстати, Евгений, есть скрипт eclime он на xt-commerce основан. Там есть очень удобные реализации некоторых функций. Ты бы глянул, может на какие идеи натолкнет. Там даже реализована продажа музыки. Есть плеер для прослушки и т.д.... + вывод в карточке товара сразу пачки треков.
+ Там есть ЧПУ нормальное. Вроде как в шопосе не везде формируется норм. ЧПУ.


+ Там есть ЧПУ нормальное. Вроде как в шопосе не везде формируется норм. ЧПУ.


а нормальное - это какое?



а что делать если эти шаблоны нужно сделать разными?

можно на лету проверять какие шаблоны есть, каких нет - и замещать шаблоны, которых нет - похожими шаблонами.

Вот тут нужно продумать эту систему.
Я собственно имел ввиду объединить файлы некоторые. Как например сделано в latest_news.html
Если мы смотрим конкретную новость, то у нас условие {if $ONE eq 1}одна новость{else}список{/if}
Вот к примеру вывод товаров
new_products_default.html
и
featured_products_default.html
объединить в
listing_product_default.html.

Или для удобвства можно еще раскидать по папкам файлы.
Партерка в папку modules/affiliate
Аккаунт в modules/account
и т.д...


а как обновить одну версию шаблона до другой? тем более если пользователь что то свое уже по добавлял.


Там есть очень удобные реализации некоторых функций. Ты бы глянул, может на какие идеи натолкнет. Там даже реализована продажа музыки. Есть плеер для прослушки и т.д.... + вывод в карточке товара сразу пачки треков.


все это реализуемо.

просто по умолчанию совать функционал на все случаи жизни - не нужно.


На главной панели админа есть поле, в это поле админ может написать, что угодно. Т.е. оставить для себя заметку. Зачем? За тем, что бывает нужно иногда записать к примеру фамилию покупателя или номер товара, чтобы на утро, что-то с этим сделать. Можно конечно записать где угодно, но в админке это было бы быстрее и практичнее.

Если углубиться в функционал, то можно было бы сделать два поля. одно общее и одно чисто для админа.
Удобно когда в магазе работает несколько админов.

Еще удобнее, если бы сохранение было реализовано на AJAX. У некоторых моих клиентов например инет очень медленный и дорогой.


на вкладочке как Новости, шаблоны - пойдет?



а нормальное - это какое?


Категории
eclime - site.ru/software-c-217.html
shopos - site.ru/cat/c3_Apple.html

товар
eclime site.ru/love-eclime-tshirt-male-p-308.html
shopos (на JS) site.ru/xphone-cell-phone-golden--silver.html
shopos (если просто включить) site.ru/product_info.php/info/p32_Apple-MacBook-MB402.html

контент
eclime site.ru/contact-us-a-9.html
shopos site.ru/shop_content.php/coID/3/content/Usloviya-ispolzovaniya

производитель
eclime site.ru/blackberry-m-18.html
shopos site.ru/index.php?manufacturers_id=1

На мой взгяд ЧПУ должно быть одного типа. И если я включаю в админке его, то нормальное должно быть везде.
А тут сейчас ЧПУ аж несколько вариантов получается ;D
Я же не могу отредактировать 150 категорий, чтобы сделать нормальные ссылки? или не могу у 7к товаров редактировать заголовки, чтобы они переписались в ссылку.
Да и формирование ссылки делать не на стороне клиента.

Варианты ЧПУ которые удобны
сайт/категория/товар/
сайт/категория
сайт/товар
А лучше как-то сделать, чтобы можно было свои урлы формировать. Типо как в WP реализовано.


все это реализуемо.

просто по умолчанию совать функционал на все случаи жизни - не нужно.

Согласен. Но расширить функционал цифровых товаров -всегда хорошо. Новые юзеры скрипта появились бы ;D

а как обновить одну версию шаблона до другой? тем более если пользователь что то свое уже по добавлял.

Ну, если держатель интернет-магазина не может нанять человека который все перенесет и обновит, то.....
ты понял я думаю.

на вкладочке как Новости, шаблоны - пойдет?

Конечно. Даже лучше будет, чтобы не в центре :D


добавляем свои идеи и пожелания на вкладке "Оставьте свой отзыв'.

чтобы такую же вкладки добавить на ваш магазин - смотрим тут

http://www.shopos.ru/forum/index.php?topic=2696.msg11747


Евгений, а нет возможности как то определять на какой страницы сейчас находишься, через смарти?

Например
{if $ActionSelect=='cart'}Вы в корзине{/if}

Чтобы можно было делать ссылки активными. + это даст возможность выводить необходимую инфу на тех или иных страницах, не редактирую файлы модулей. Достаточно будет в index.html вставить, что нужно.


На реформале думаю этому не место.

Вывод производителей в листинге товара не очень удобен.  Если бы выводить его в шаблон через foreach, было бы удобнее.

Попутно вопрос. Как можно определить два последних элемента в foreach?
С iteration я так и не смог этого сделать.

Мне нужно всем блокам добавлять нижний бордер, а последним двум, нет.



На реформале думаю этому не место.

Вывод производителей в листинге товара не очень удобен.  Если бы выводить его в шаблон через foreach, было бы удобнее.

Попутно вопрос. Как можно определить два последних элемента в foreach?
С iteration я так и не смог этого сделать.

Мне нужно всем блокам добавлять нижний бордер, а последним двум, нет.


{if $smarty.foreach.aussen.iteration+2 gt $smarty.foreach.aussen.total}
последние 2 элемента
{else}
все остальные
{/if}

aussen берется из
{foreach name=aussen item=module_data from=$module_content}


Что-то не получилось.
Это для листинга товара нужно.

Вот смотри. Я сделал так. Каждый второй блок имеет класс border-left.
А нижний бордер в разделители вставлен с классом sep

{foreach name=aussen item=module_data from=$module_content}
{php}$col++;{/php}
<div class="prod-two-col {if $smarty.foreach.aussen.iteration % 2 == 1}{else}border-left{/if}">
содержимое
</div>
{php}
if ($col>=2) {
$col=0;
echo '<div class="clear sep"></div>';
}
{/php}
{/foreach}


У меня, что-то не получилось с твоим примером.


я проверял в new_products_default.html

и этот код тоже работает

{if $smarty.foreach.aussen.iteration % 2 == 1}не четный элемент{else}четный{/if}


в листинге товаров тоже работает

product_listing\product_listing_columns.html

{config_load file="$language/lang.conf" section="index"}
<h1 class="contentBoxHeading">{$CATEGORIES_NAME}</h1>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
  <tr valign="top">
    <td class="contentsTopics">{$CATEGORIES_HEADING_TITLE}</td>
  </tr>
 
</table>
{if $CATEGORIES_DESCRIPTION}<br />
{$CATEGORIES_DESCRIPTION}{/if}<br />{if $CATEGORIES_IMAGE}<img src="{$CATEGORIES_IMAGE}" alt="{$CATEGORIES_NAME}" />
<br />
<table width="100%"  border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td style="border-bottom: 1px solid; border-color: #000000;">&nbsp;</td>
  </tr>
</table>
{/if}
{if $MANUFACTURERS_DESCRIPTION}<br />
<table width="100%" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td class="main" align="left">
{$MANUFACTURERS_DESCRIPTION}
    </td>
  </tr>
</table>
<br />
{/if}
{if $MANUFACTURER_SORT}<br />
<table width="100%" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td class="main" align="left">
{$MANUFACTURER_SORT}
    </td>
  </tr>
</table>
<br />
{/if}
{if $CATEGORIES_NAME}
<table width="100%" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td class="main" align="left">
{#text_sort#}
<a href="{$LINK_sort_name_asc}">{#text_sort_name_asc#}</a> |
<a href="{$LINK_sort_name_desc}">{#text_sort_name_desc#}</a> |
<a href="{$LINK_sort_price_asc}">{#text_sort_price_asc#}</a> |
<a href="{$LINK_sort_price_desc}">{#text_sort_price_desc#}</a>
    </td>
  </tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td class="main" align="left">
{#text_products_per_page#} <a href="{$LINK_PAGE}10">10</a>, <a href="{$LINK_PAGE}20">20</a>, <a href="{$LINK_PAGE}50">50</a>, <a href="{$LINK_PAGE}100">100</a>
    </td>
  </tr>
</table>
{/if}
<table width="100%" border="0" cellspacing="0" cellpadding="4">
  <tr>

{foreach name=aussen item=module_data from=$module_content}
  {php} $col++;
  {/php}
    <td class="main" valign="top">
   
<table border="0" width="100%" cellspacing="0" cellpadding="0">
  <tr class="contentBoxContents1" valign="top">
    <td height="90" class="contentBoxContents1" valign="top">
      <table width="100%" cellpadding="0" cellspacing="5" border="0">
     
     
<tr>

    <td class="contents" width="100%" valign="top" colspan="2" align="center">
   
    <strong><a href="{$module_data.PRODUCTS_LINK}">{$module_data.PRODUCTS_NAME}</a></strong>
   
</td>
</tr>     
     
      <tr>
        <td class="contents" valign="top" align="center">
       
        {if $module_data.PRODUCTS_IMAGE}<a href="{$module_data.PRODUCTS_LINK}"><img src="{$module_data.PRODUCTS_IMAGE}" alt="{$module_data.PRODUCTS_NAME}" title="{$module_data.PRODUCTS_NAME}" /></a>{/if}{if $module_data.PRODUCTS_FSK18=='true'}<br /><img src="{$tpl_path}img/fsk18.gif" alt="" />{/if}
       
        </td>
                                                 
    <td class="contents" align="center">

            {$module_data.PRODUCTS_BUTTON_BUY_NOW_NEW}

      </td>
    </tr>
   
<tr>

    <td class="contents" width="100%" valign="top" colspan="2">
    {if $smarty.foreach.aussen.iteration+2 gt $smarty.foreach.aussen.total}
последние 2 элемента
{else}
все остальные
{/if}
    {if $module_data.PRODUCTS_SHORT_DESCRIPTION}{$module_data.PRODUCTS_SHORT_DESCRIPTION}<br />
   
    <a href="{$module_data.PRODUCTS_LINK}">{#text_more#}</a><br />{/if}

    <br />

            <strong>{$module_data.PRODUCTS_PRICE} </strong><br />
            {$module_data.PRODUCTS_TAX_INFO}{$module_data.PRODUCTS_SHIPPING_LINK}
            {if $module_data.PRODUCTS_VPE}<br />{$module_data.PRODUCTS_VPE}{/if}
<br />

{if $module_data.PRODUCTS_SHIPPING_NAME}
                          <table width="200" border="0" cellpadding="0" cellspacing="0">
                            <tr valign="middle">
                              <td class="main" align="right">{#text_shippingtime#}</td>
                              {if $module_data.PRODUCTS_SHIPPING_IMAGE}
                              <td><img src="{$module_data.PRODUCTS_SHIPPING_IMAGE}" alt="{$module_data.PRODUCTS_SHIPPING_NAME}" /></td>
                              {/if}
                              <td class="main" align="left">&nbsp;{$module_data.PRODUCTS_SHIPPING_NAME}</td>
                            </tr>
                          </table>
                          {/if}
   
    </td>


</tr>   
   
    </table>
  </td>

  </tr>
  <tr>
    <td width="100%" colspan="2" class="boxText"><img src="{$tpl_path}img/pixel_trans.gif" border="0" alt="" width="1" height="10" /></td>
  </tr>
</table>   
   

</td>
  {php}
  if ($col>=2) {
  $col=0;
  echo '</tr><tr>';
  }
  {/php}
  {/foreach} 
  <td></td>
  </tr>
</table>

<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td>
<span class="right">{$NAVIGATION}</span>{$NAVIGATION_PAGES}
</td>
</tr>
</table>


кэш стоит почистить. может в нем дело


Не. коды то работают замечательно.

Меня интересует та конструкция, которую я привел

Вот блок вывода товара
{foreach name=aussen item=module_data from=$module_content}
{php}$col++;{/php}
<div class="prod-two-col {if $smarty.foreach.aussen.iteration % 2 == 1}{else}border-left{/if}">
содержимое
</div>
{php}
if ($col>=2) {
$col=0;
echo '<div class="clear sep"></div>';
}
{/php}
{/foreach}

Вот класс sep который красным, выводит clear-both и border-bottom
Мне нужно сделать так, чтобы этого sep в последних двух(я по два вывожу) товарах небыло.
Т.е. чтобы небыло нижнего подчеркивания у последних товаров.
Другое подчеркивание не подходит, так как если делать дивами, то высота у карточек товара будет разная. вот clear и sep выравнивают блоки эти.

Уже не знаю че делать. хоть таблицы пихай)

Тут наверно надо будет мне статью потом написать про вывод товара разными вариантами и примерами смарти, когда закончу ;D


{if $smarty.foreach.aussen.iteration+2 gt $smarty.foreach.aussen.total}
<div class="clear"></div>
{else}
<div class="clear sep"></div>
{/if}


{foreach name=aussen item=module_data from=$module_content}
<div class="prod-two-col {if $smarty.foreach.aussen.iteration % 2 == 1}{else}border-left{/if}">
содержимое
</div>
{if $smarty.foreach.aussen.iteration+2 gt $smarty.foreach.aussen.total}
<div class="clear"></div>
{else}
<div class="clear sep"></div>
{/if}
{/foreach}


а вот это

{if $smarty.foreach.aussen.iteration % 2 == 1}{else}border-left{/if}


проще записать вот так

{if $smarty.foreach.aussen.iteration % 2 == 0}border-left{/if}



{foreach name=aussen item=module_data from=$module_content}
<div class="prod-two-col {if $smarty.foreach.aussen.iteration % 2 == 1}{else}border-left{/if}">
содержимое
</div>
{if $smarty.foreach.aussen.iteration+2 gt $smarty.foreach.aussen.total}
<div class="clear"></div>
{else}
<div class="clear sep"></div>
{/if}
{/foreach}


Хех. Так в том то и дело, что не подходит. clear sep то у меня разделяют блоки. И разделение это выводится через echo. Внутри блока это не прокатит. Тогда высота блоков будет разная на вид.

Может тут как-то можно, что-то сделать?

if ($col>=2) {
  $col=0;
  echo '<div class="clear sep"></div>';
}



а вот это

{if $smarty.foreach.aussen.iteration % 2 == 1}{else}border-left{/if}


проще записать вот так

{if $smarty.foreach.aussen.iteration % 2 == 0}border-left{/if}



Ага) Спасиб


Мне нужно сделать так, чтобы этого sep в последних двух(я по два вывожу) товарах небыло.


разве не это делает тот код, что я скинул?

что то не понимаю тебя.

Хех. Так в том то и дело, что не подходит. clear sep то у меня разделяют блоки. И разделение это выводится через echo. Внутри блока это не прокатит. Тогда высота блоков будет разная на вид.


чем вывод через echo в режиме php отличается от вывода через просто smarty?


Все. На свежую голову придумалось. Не допер сначала до этого варианта))

Вот как сделал. Не оч красиво конечно, но резуальтат какой нужно ;D

{if $smarty.foreach.aussen.iteration+2 gt $smarty.foreach.aussen.total}
{php}
if ($col>=2) {
$col=0;
echo '<div class="clear"></div>';
}
{/php}
{else}
{php}
if ($col>=2) {
$col=0;
echo '<div class="clear sep"></div>';
}
{/php}
{/if}


Евгений, спасибо за подсказки!!!


Евгений.
А у тебя нет в закромах правленых блоков Новинок и Рекомендуемых блоков, чтобы не по одному товару выводилось?


Создание настроек шаблона.

Для теста я в файле boxes.php
Вставляю следующее

define('DIR_WS_CONFIG', _THEMES_C.'source/config/');

include(DIR_WS_CONFIG . 'theme.php');


Файл theme.php содержит настройки шаблона. Но эти настройки соответственно не работаю напрямую в шаблоне. А хотело бы :D
В каком файле к примеру подключить свой конфиг, чтобы можно было непосредвтсвенно в index.html или других html файлах шаблона работи настройки заданные в theme.php?


скорее всего за настройки шаблона будет отвечать плагин шаблона themes/шаблон/plugins/setting.php

но опять же - сложный вопрос. как бы через пару версий не пришлось убирать

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

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


за метки {$1}  {$2}  {$3} скорее всего тоже какой то шаблонный плагин будет отвечать. 

ничего на скорую руку набросать не получится.


скорее всего за настройки шаблона будет отвечать плагин шаблона themes/шаблон/plugins/setting.php

но опять же - сложный вопрос. как бы через пару версий не пришлось убирать

А зачем убирать? Вещь полезная и нужная.
как в WP реализовать. Т.е. создатель шаба может врубить эти настройки. И они будут в меню Настройки - Шаблоны - Настройки шаблона, к примеру.

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

Кстати. Сложно будет сделать там категоризацию плагинов? Например: блоки, система, включенные, выключенные и т.д... А категорию уже задавать в настройках плагина. Т.е. разделить включенные, выключенные только. Остальные просто с пометкой категории будут И прилепить сортировку какую-то ;D
Эт сейчас мало плагинов, в будущем будет то много.

Ну и разделить сразу плагины шаблона от плагинов остальных. Только не понятно какие плагины будут у шабллона? Т,е. будет простая категоризация.
отделение плагинок шаблона по категории.

за метки {$1}  {$2}  {$3} скорее всего тоже какой то шаблонный плагин будет отвечать. 

ничего на скорую руку набросать не получится.

Ага. ченить такое придумать. как только? Чет не оч представляю себе в виде плагина.


Несколько предложений и поправок для шаблона.

В процессе создания шаблона нашел к чему можно приложить руку разработчика ;)
Некоторые вещи уже предлагал. но решил собрать все воедино)

1 - В файле account.html
Нужно изменить код кнопки добавления в корзину у товаров которые были просмотрены. Иначе ее просто не видно.
Ищем - {$products_history.BUY_NOW_BUTTON}
Заменяем на - {$products_history.PRODUCTS_BUTTON_BUY_NOW_NEW}

Без условия установлен {$error_message}
Может не критично, но если вертальшик нотисам и эррорам задает стили, то условие нужно.

2 - На некоторых страница где есть формы(Например регистрация), ерроры выводятся возле кнопки.
Т.е. id="errormsg". Было бы не плохо видеть тег для вывода ерроров в шаблоне.
Загнать вывод просто в див) А вообще валидатор не самый лучший.

3 - Я понимаю, что это очень долго, но было бы не плохо вывести инпуты в шаблон.
Объясню почему. Нет возможности менять стили кнопкам. Проще можно было бы вынести названия кнопок в ленг и сделать текстовые. Я уже предлагал такое.
Картинки не актуальны вообще. Кому надо, тот сделает картинкой. Да и можно было бы делать инпуты с hover и т.д...
+ можно было бы добавлять свои варианты валидации.+ лепить стилизацию вообще всех форм: чекбоксов, селектов и т.д...
По крайней мере было бы легче.
Самы большой минус, если у юзера выключен показ картинок, то кнопок в некоторых местах вообще не видно.
Понимаю, что у многих инет быстрый, но у многих он и оч медленный. + еще остались места, где траф оч дорогой.
МОжно подумат - Зачем выключать картинки при просмотре магазина? - , потому, что не всегда нужны картинки.
Я например реализовал порядка 7 сайтов каталогов вообще без картинок. Т.е. у товаров картинок нет.
соотвественно туда могут забрести юзеры которые не включают картинки.

4 - Сейчас цены выводятся очень не удобно. Для верстальщика не очень много вариантов, как отобразить цены.
Было бы удобнее если бы в шаблоне было так
{$module_data.PRODUCTS_PRICE}
{if $module_data.PRODUCTS_PRICE1}
{$module_data.PRODUCTS_PRICE1}
{/if}
{if $module_data.PRODUCTS_PRICE2}
{$module_data.PRODUCTS_PRICE2}
{/if}
и т.д.

5 - У зарегистрированного юзера капча не особо и нужна на странице newsletter.

6 - На странице выбора способа оплаты очень не удобно реализован вывод дополнительных полей оплаты.
Например модуль - Оплата по счёту. Справа от полей есть как бы пример, например:
Название организации ПОЛЕ или ФИО предпринимателя. Вот это "или ФИО предпринимателя"
Тоже самое и "Називание банка" ПОЛЕ - Пример: ОАО АКБ "РОСБАНК" Ставропольский филиал, г. Ставрополь.
Вынести бы эти примеры заполнения в шаблон отдельным тегом. Тогда можно было бы отображать эти подсказки как угодно.
В большинстве случаев я их переделывал. Эт конечно не существенно, но при обновлении нужно их постоянно править, что создает неудобство)

7 - В файле checkout_confirmation.html есть вывод заказанного товара - {$PRODUCTS_BLOCK} и вывода итого {$TOTAL_BLOCK}.
Может вынести в шаблон? А то нет возможности настроить вывод.
Ну и чтобы не сливалось в один тег - Стоимость товара: 152.572,0 руб. и т.п.

8 - Блок категорий. Понимаю, что и так в принципе можно сделать, что угодно. Но очень все запутано и не очень понятно.
Но можно упростить и улучший вывод категорий в блоке. Да и понятнее будет.
Например файл box_categories.html:

<div id="boxCategories">
<div id="categoriesBoxMenu">
<ul>
<!-- основные категории -->
{foreach name=aussen item=module_data from=$module_content}
<li {if $cat_select=='cat_id'}class="active"{/if}><!-- активная категори -->
<a href="{$cat_url}">{$cat_name} {$cat_count}</a>
<!-- под.категории -->
{if $sub_cat}
<ul>
{foreach name=aussen item=module_data from=$module_content}
<li {if $cat_select=='cat_id'}class="active"{/if}><!-- активная под.категори -->
<a href="{$cat_url}">{$cat_name} {$cat_count}</a>
</li>
{/foreach}
</ul>
{/if}
</li>
{/foreach}
</ul>
</div>
</div>


9 - Расширить количество новинок, рекомендуемых в блоках. А то по одному товару как-то не серьезно)
или вынести настройки в админку. т.е.: количество в блоках, рендом или нет.

10 - Добавить возможность указывать active\selected для валют.

11 - Вынести подключение Jquery, thickbox в шаблон. ну и естественно перекинуть его в папку с шаблоном.
По сути он используется стандартно только для thickbox и валидатора.
А так можно было бы убрать вообще thickbox и использовать более интересные плагины.
+ вообще можно было бы заюзать к примеру mootools ;)
Почему в шаблон? потому, что например я делаю шаб бесплатный в нем есть разные феньки на JQ. Для того, чтобы JQ был везде, нужно править header.php, что не есть гуд. Если подрубать свой в шаблон, то тогда будет на странице товара 2 JQ подрублено и thickbox не пашет.

зы. вроде ничего не забыл)) Если, что-то лишнее, уж простите)


В шаблоне нету настройки вывода popup_content.php


В файле шаблона checkout_shipping_address.html
нету настройки {$BLOCK_ADDRESS}

Т.е. место выбора адреса.


сколько уже всего накопилось(((


;)

В партнерской программер в файле affiliate_affiliate.html не работает проверка на вывод нотиса.

{if $info_message neq ''}
  <?php echo $info_message; ?>
{/if}


хех. поразился когда залил в категорию почти 50к товара. Это надо видеть :D
Мои пожелания...

тут поможет ограничение на вывод только 10-20 ссылок на страницы, + возможность листать сразу по 10-20 страниц. ну и инпут для перехода на нужную страницу.))
Это не все ссылки на страницы. В общей сложности получило 2496 страниц.


{if $info_message neq ''}
  <?php echo $info_message; ?>
{/if}



как минимум нужно вот так

{if $info_message neq ''}
  {php} echo $info_message; {/php}
{/if}


хех. поразился когда залил в категорию почти 50к товара. Это надо видеть :D
Мои пожелания...

тут поможет ограничение на вывод только 10-20 ссылок на страницы, + возможность листать сразу по 10-20 страниц. ну и инпут для перехода на нужную страницу.))
Это не все ссылки на страницы. В общей сложности получило 2496 страниц.


ага. ужас

сейчас гляну что можно сделать


Угу.
было бы не плохо)

Еще заметил одно неудобноство.

Я перехожу в категорию и там есть сортировка и возножен вывод по 10-20 товаров и т.д...
можно выбрать сортировку по цене, наименованию.
так вот. Если я например сортирую товары по цене или имени, то нет возможности выделить выбранную сортировку.
Нету возможности выделить выбранное количество товаров на страницу.
Конечно это может и лишнее, но было бы не плохо с точки зрения юзабильности)) Не все покупатели адекватны!))

Теперь по поиску. В результатах поиска нету сортироки.
К примеру магазин часов. Я вбил в поиск производителя, выпала куча товаров. Но сортировать их нет возможност. Это очень не удобно. Ситуация когда поиск выдал 300 товаров с разными ценами, и наименованиями, и нету возможности это все дело сортировать...

Еще заметил такую ошибку. Если у статей включен блок Авторы, то его видно даже тогда когда авторов нету. То же самое и с производителями.
ЗЫ, а зачем вообще нужны эти авторы? не видел сайтов на шопосе где их юзали.



хех. поразился когда залил в категорию почти 50к товара. Это надо видеть :D
Мои пожелания...

тут поможет ограничение на вывод только 10-20 ссылок на страницы, + возможность листать сразу по 10-20 страниц. ну и инпут для перехода на нужную страницу.))
Это не все ссылки на страницы. В общей сложности получило 2496 страниц.


ага. ужас

сейчас гляну что можно сделать


вот что получилось

Мои пожелания...


в файл admin\themes\default\styles\style.css

добавить следующие стили


span.page_menu a:link, span.page_menu a, span.page_menu a:visited
{
    padding: 1px;
    margin: 2px;
    margin-bottom:4px;
font-size: 12px;
color: #4a3af3;
    border: 1px solid #abcfd5;
    border-top-left-radius: 4px;
    border-top-right-radius: 4px;
    border-bottom-left-radius: 4px;
    border-bottom-right-radius: 4px;
  -moz-border-radius-topleft: 4px;
  -webkit-border-top-left-radius: 4px;
  -moz-border-radius-topright: 4px;
  -webkit-border-top-right-radius: 4px;
  -moz-border-radius-bottomleft: 4px;
  -webkit-border-bottom-left-radius: 4px;
  -moz-border-radius-bottomright: 4px;
  -webkit-border-bottom-right-radius: 4px;
}

span.page_menu a:hover
{
    background-color: #ecebfe;
text-decoration: none;
}

span.page_menu_active a:link, span.page_menu a, span.page_menu_active a:visited
{
    padding: 1px;
    margin: 2px;
color: #f00;
    border: 1px solid #f69;
font-size: 12px;
    border-top-left-radius: 4px;
    border-top-right-radius: 4px;
    border-bottom-left-radius: 4px;
    border-bottom-right-radius: 4px;
  -moz-border-radius-topleft: 4px;
  -webkit-border-top-left-radius: 4px;
  -moz-border-radius-topright: 4px;
  -webkit-border-top-right-radius: 4px;
  -moz-border-radius-bottomleft: 4px;
  -webkit-border-bottom-left-radius: 4px;
  -moz-border-radius-bottomright: 4px;
  -webkit-border-bottom-right-radius: 4px;
}

span.page_menu_active a:hover
{
    background-color: #ffeef4;
text-decoration: none;
}

span.page_menu_group
{
  padding-top:8px;
}


глянь если не сложно. в хроме отказываются работать.
ну и естественно закругления в ie работать не будут

в файле admin\lang\ru\categories.php

добавить

define('TEXT_LAST_PAGE','Последняя »');
define('TEXT_FIRST_PAGE','« Первая');


в файле admin\includes\functions\general.php

добавить функцию

;

    $page_num = ceil($numr / $max_count);
$stp = '';

    if (empty($c_page))
    {
        $start = 1;
        $end = ($page_num>=10) ? 10 : $page_num;
$_num = 1;
    }
    else
    { 
        $_num = (int)$c_page;
        if ($_num < 1) $_num = 1;
 
        //если текущая страница превышает общее кол. страниц
        if ($_num > $page_num)
        {
            $start = 1;
            $end = ($page_num>=10)? 10:$page_num;
        }
        else
        {
        if ($_num >5) $start = $_num - 4; else $start = 1;

    if ($_num >=1 && $_num <=5)
    {
        $end = ($page_num >= $start+9 ) ? $start+9 : $page_num-$start;
    }
    else
    {
            $end = ($page_num > $_num+4 ) ? $_num+4 : $page_num;
    }
        }
    }
    if ($_num != 1) $stp .= '<span class="page_menu"><a href="'.os_href_link($file_name, '&page=1'.$_param).'" >'.TEXT_FIRST_PAGE.'</a></span>';

if ($_num != 1) $stp .= '<span class="page_menu"><a href="'.os_href_link($file_name, '&page='.($_num-1).$_param).'" > < '.'</a></span>';

    for ($i=$start; $i<=$end; $i++)
    {
        if ($i == $_num)
    {
$stp.='<span class="page_menu_active"><a href=categories.php?cPath='.$cPath.'&page='.$i.$_param.'>'.$i.'</a></span>';
    }
    else
    {

    $stp.='<span class="page_menu"><a href=categories.php?page='.$i.$_param.'>'.$i.'</a></span>';
    }
    }

if ($_num != $page_num) $stp .= '<span class="page_menu"><a href="'.os_href_link($file_name, '&page='.($_num+1).$_param).'" > > '.'</a></span>';

if ($_num != $page_num) $stp .= '<span class="page_menu"><a href="'.os_href_link($file_name, '&page='.($page_num).$_param).'" >'.TEXT_LAST_PAGE.'</a></span>';



return $stp;
}


файл admin\includes\modules\categories_view.php

заменить на прикрепленный

в этом файле, за вывод меню отвечают строчки

;

    $page_num = ceil($numr / $max_count);
$stp = '';

    if (empty($c_page))
    {
        $start = 1;
        $end = ($page_num>=10) ? 10 : $page_num;
$_num = 1;
    }
    else
    { 
        $_num = (int)$c_page;
        if ($_num < 1) $_num = 1;
 
        //если текущая страница превышает общее кол. страниц
        if ($_num > $page_num)
        {
            $start = 1;
            $end = ($page_num>=10)? 10:$page_num;
        }
        else
        {
        if ($_num >5) $start = $_num - 4; else $start = 1;

    if ($_num >=1 && $_num <=5)
    {
        $end = ($page_num >= $start+9 ) ? $start+9 : $page_num-$start+1;
    }
    else
    {
            $end = ($page_num > $_num+4 ) ? $_num+4 : $page_num;
    }
        }
    }
    if ($_num != 1) $stp .= '<span class="page_menu"><a href="'.os_href_link($file_name, '&page=1'.$_param).'" >'.TEXT_FIRST_PAGE.'</a></span>';

if ($_num != 1) $stp .= '<span class="page_menu"><a href="'.os_href_link($file_name, '&page='.($_num-1).$_param).'" > < '.'</a></span>';

    for ($i=$start; $i<=$end; $i++)
    {
        if ($i == $_num)
    {
$stp.='<span class="page_menu_active"><a href=categories.php?cPath='.$cPath.'&page='.$i.$_param.'>'.$i.'</a></span>';
    }
    else
    {

    $stp.='<span class="page_menu"><a href=categories.php?page='.$i.$_param.'>'.$i.'</a></span>';
    }
    }

if ($_num != $page_num) $stp .= '<span class="page_menu"><a href="'.os_href_link($file_name, '&page='.($_num+1).$_param).'" > > '.'</a></span>';

if ($_num != $page_num) $stp .= '<span class="page_menu"><a href="'.os_href_link($file_name, '&page='.($page_num).$_param).'" >'.TEXT_LAST_PAGE.'</a></span>';



return $stp;
}


Спасибо большое. Работает как нужно.

Немного поправил менюху

В general.php изменить на

function shopos_pages_menu($numr, $max_count, $c_page, $param = '') {
  $_param = '';
  if (isset($param['param']) && count($param['param'])>0)
  {
      foreach ($param['param'] as $_param_name => $_param_value)
      {
        $_param .= '&'.$_param_name.'='.$_param_value;
      }
  }
  $file_name = $param['file_name'];
    $page_num = ceil($numr / $max_count);
  $stp = '';
    if (empty($c_page))
    {
        $start = 1;
        $end = ($page_num>=10) ? 10 : $page_num;
      $_num = 1;
    }
    else
    { 
        $_num = (int)$c_page;
        if ($_num < 1) $_num = 1;
        //если текущая страница превышает общее кол. страниц
        if ($_num > $page_num)
        {
            $start = 1;
            $end = ($page_num>=10)? 10:$page_num;
        }
        else
        {
          if ($_num >5) $start = $_num - 4; else $start = 1;
 
          if ($_num >=1 && $_num <=5)
          {
              $end = ($page_num >= $start+9 ) ? $start+9 : $page_num-$start;
          }
          else
          {
              $end = ($page_num > $_num+4 ) ? $_num+4 : $page_num;
          }
        }
    }
    if ($_num != 1) $stp .= '<li><a href="'.os_href_link($file_name, '&page=1'.$_param).'" >'.TEXT_FIRST_PAGE.'</a></li>';
  if ($_num != 1) $stp .= '<li><a href="'.os_href_link($file_name, '&page='.($_num-1).$_param).'" >&laquo;</a></li>';
    for ($i=$start; $i<=$end; $i++)
    {
        if ($i == $_num)
      {
        $stp.='<li class="current"><a href=categories.php?cPath='.$cPath.'&page='.$i.$_param.'>'.$i.'</a></li>';
      }  else {
          $stp.='<li><a href=categories.php?page='.$i.$_param.'>'.$i.'</a></li>';
      }
    }
  if ($_num != $page_num) $stp .= '<li><a href="'.os_href_link($file_name, '&page='.($_num+1).$_param).'" >&raquo;</a></li>';
  if ($_num != $page_num) $stp .= '<li><a href="'.os_href_link($file_name, '&page='.($page_num).$_param).'" >'.TEXT_LAST_PAGE.'</a></li>';
return $stp;
}


В categories_view.php весь кусок с <tr>......</tr> заменить на
<tr>
<td colspan="2">
<ul class="page_menu_group">
<?php
if ($numr>$max_count) {
$_param = array('file_name' => FILENAME_CATEGORIES, 'page_name' => 'page', 'param' => array('cPath' => $cPath));

if (isset($_GET['search'])) $_param['param']['search'] = $_GET['search'];  
echo shopos_pages_menu($numr, $max_count, $_GET['page'], $_param);
}
?>
</ul>
</td>
</tr>


В style.css найти
/*  help.php */

и выше добавить (в стилях че-то мешяет, если добавлять например в самый низ style.css. не смотре правда че.)
ul.page_menu_group {float:left;width:100%;margin:10px 0 10px 0;padding:0;list-style:none;font-size:0.9em;text-align:center;}
ul.page_menu_group li {display:inline;margin:0 5px 0 5px;}
ul.page_menu_group li a, ul.page_menu_group li a:visited {color:#666;background:#eee;padding:2px 4px 2px 4px;border:1px solid #ccc;-moz-border-radius:3px;border-radius:3px;-webkit-border-radius:3px;-khtml-border-radius:3px;}
ul.page_menu_group li a:hover {text-decoration:none;border:1px solid red;color:red;}
ul.page_menu_group li.current a, ul.page_menu_group li.current a:visited {border:1px solid red;color:red;}


В языковом файле lang/ru/categories.php
добавить
define('TEXT_LAST_PAGE','Последняя &raquo;');
define('TEXT_FIRST_PAGE','&laquo; Первая');


Получилось так
Мои пожелания...

Единственное, что не смог придумать как сделать: вывести общий список страниц(типо: Всего страниц: 23), возможность перехода на нужную.
Простой input в который пишешь например 5 и нажимаешь ОК и переходишь на пятую страницу. А то например на страницу 1567 не попасть ;D


разное - статистика - просмотренные товары

там есть меню с переходом на нужную страницу

так сделать?

и куда это меню, перед ссылкой последняя или после?


Можно и так. очень удобно будет я думаю.
а разместить можно под списком или справа.


а если вот так ?

Мои пожелания...


или вообще убрать перечисление страниц

первая, переход на определенную страницу, последняя. все

вариантов очень много.


Можно убрать перечисление в принципе, оставить только select и кнопки для перехода на Следующую\Предыдущую и Первая\Последняя.


вот что получилось

Мои пожелания...

код немного уменьшился

function shopos_pages_menu($numr, $max_count, $c_page, $param = '')
{
$_param = '';

if (isset($param['param']) && count($param['param'])>0)
{
  foreach ($param['param'] as $_param_name => $_param_value)
  {
      $_param .= '&'.$_param_name.'='.$_param_value;
  }
}

$file_name = $param['file_name'];

    $page_num = ceil($numr / $max_count);
$stp = '';

    if (empty($c_page))
{
    $_num = 1;
}
    else
    { 
        $_num = (int)$c_page;
        if ($_num < 1) $_num = 1;
    }

    if ($_num != 1) $stp .= '<li><a href="'.os_href_link($file_name, 'page=1'.$_param).'" >'.TEXT_FIRST_PAGE.'</a></li>'."\n";

if ($_num != 1) $stp .= '<li><a href="'.os_href_link($file_name, 'page='.($_num-1).$_param).'" >&laquo;'.'</a></li>'."\n";;

$select .= '<select class="pages_menu_select" ONCHANGE="top.location.href =
    \''.os_href_link($file_name, $_param).'\'+this.options.value">';


for ($i=1; $i<=$page_num; $i++ )
{
    if ($i == $_num)
    {
$select .= '<option value="&page='.$i.'" selected>'.$i.'</option>';
    }
    else
    {
    $select .= '<option value="&page='.$i.'" >'.$i.'</option>';
    }
}

$select .= '</select>';

$stp.= '<li class="current">'.$select."</li>";

if ($_num != $page_num) $stp .= '<li><a href="'.os_href_link($file_name, 'page='.($_num+1).$_param).'" >&raquo;'.'</a></li>';

if ($_num != $page_num) $stp .= '<li><a href="'.os_href_link($file_name, 'page='.($page_num).$_param).'" >'.TEXT_LAST_PAGE.'</a></li>';



return $stp;
}

стили немного подправил и отступы.

ul.page_menu_group {float:left;width:100%;margin:10px 0 10px 0;padding:0;list-style:none;font-size:11px;text-align:left;}
ul.page_menu_group li {display:inline;margin:0 2px 0 2px;}
ul.page_menu_group li a, ul.page_menu_group li a:visited {color:#666;background:#eee;padding:2px 4px 2px 4px;border:1px solid #ccc;-moz-border-radius:3px;border-radius:3px;-webkit-border-radius:3px;-khtml-border-radius:3px;}
ul.page_menu_group li a:hover {text-decoration:none;border:1px solid #ee2c33;color:red;}
ul.page_menu_group li.current a, ul.page_menu_group li.current a:visited {border:1px solid #ee2c33;color:red;}


и в categories_view.php

тож по мелочам изменения. прикреплен


так же можно выделять текущий option красным цветом, чтобы при открытии меню было видно, какой текущий номер страницы.

но это уже мелочи


1 - В файле account.html


спасибо. исправлено.

только вот во всех шаблонах - нет возможности исправить. только в основных


5 - У зарегистрированного юзера капча не особо и нужна на странице newsletter.


готово

заменить файл /newsletter.php на прикрепленный

или посмотреть различия на svn

http://code.google.com/p/shopos/source/diff?spec=svn1486&r=1486&format=side&path=/trunk/2.5.1/upload/newsletter.php

и в шаблоне

themes/шаблон/modules/newsletter.html

заменить


  <tr>
    <td><strong>{#text_sec_code#}</strong></td>
    <td><strong>{$CAPTCHA_IMG}</strong></td>
  </tr>

  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td><strong>{#text_sec_code#}</strong></td>
    <td>{$CAPTCHA_INPUT}</td>
  </tr>


на

  {if !$smarty.session.customer_id}
  <tr>
    <td><strong>{#text_sec_code#}</strong></td>
    <td><strong>{$CAPTCHA_IMG}</strong></td>
  </tr>

  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td><strong>{#text_sec_code#}</strong></td>
    <td>{$CAPTCHA_INPUT}</td>
  </tr>
    {/if}



11


пока нет

10 - Добавить возможность указывать active\selected для валют.


поподробнее

мождно же включить блок box_currencies.

это не то?



10 - Добавить возможность указывать active\selected для валют.


поподробнее

мождно же включить блок box_currencies.

это не то?


Чтобы было видно какая валюта выбрана в данный момент.




10 - Добавить возможность указывать active\selected для валют.


поподробнее

мождно же включить блок box_currencies.

это не то?


Чтобы было видно какая валюта выбрана в данный момент.


так блок с валютами включить. он по умолчанию отключен



так блок с валютами включить. он по умолчанию отключен


Не не. Блок включен, но там ссылка не подсвечивается той валюты которая активка.
Т.е. Евро Доллар Рубль - доллар и рубль обычные ссылки, а евро выделена красным. типо выбранная валюта.


в файле themes\шаблон\source\boxes\currencies.php

заменить

. '</a> ';
  }

на

while (list($key, $value) = each($osPrice->currencies)) {
  $count_cur++;
    if ($_SESSION['currency'] == $key)
{
      $currencies_string .= ' <a class="current" href="' . os_href_link(basename($PHP_SELF), 'currency=' . $key.'&'.os_get_all_get_params(array('language', 'currency')), $request_type) . '">' . $value['title'] . '</a> ';
}
else
{
  $currencies_string .= ' <a href="' . os_href_link(basename($PHP_SELF), 'currency=' . $key.'&'.os_get_all_get_params(array('language', 'currency')), $request_type) . '">' . $value['title'] . '</a> ';
}
  }

для ссылки на текущую валюту указывается класс current


или вот с выпадающим списком

http://www.shopos.ru/forum/index.php?topic=2208.0

там текущая валюта установлена выбранной


Огромное спасибо ;D



Или блоки. Блок категорий как-то оптимизировать. Кушает запросов много, да и править его не удобно.


это уже сделано. 2 запроса на блок категорий вместо тысяч

в этом месяце выйдет обновление.


я недавно забабахал бокс категорий, 1 запрос, выполнение 0.1 - 0.2 с.




Или блоки. Блок категорий как-то оптимизировать. Кушает запросов много, да и править его не удобно.


это уже сделано. 2 запроса на блок категорий вместо тысяч

в этом месяце выйдет обновление.


я недавно забабахал бокс категорий, 1 запрос, выполнение 0.1 - 0.2 с.


:) можно и без единого запроса сделать. запрос будет, но он будет выполнятся не тогда, когда пользователи открывают магазин.

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

и кэш обновлять только при изменении данных о категориях.

тут некоторые вещи так и реализованы (редкообновляемый кэш хранится в папке cache\system\)

но начинаются проблемы, когда категорий много.

да и еще нужно понимать под какие ресурсы нужно оптимизировать.

если у хостера медленная дисковая подсистема (на дешевых хостингах обычно так и бывает) - выдергивание кэша из файлов будет убивать много времени. нужно смотреть как быстрее работает - данные брать из базы или из кэша на диске.

а с нагрузкой на процессор и потребления оперативной памяти еще сложнее.


пожалуйста!

у меня категорий около 250, я думаю это не мало, работает на ура, 1 запрос и все, времени с учетом что через смарти 0.1-0.2с, причем все вложеныые собирает...
сделано круто сам сижу и себе удивляюсь)

а нету документации чисто по програмеской части? я вот хочу модуль заказа перепелить...
я ведь понял что магаз на основе oscomerce там заказ на 1й странице оформляеться... знаю куча всего но можно было сделать все окуратно по блокам скрывающимся)


и еще я всегда говорю теперь - делайте все проще и понятней, не надо мудрить, сильно облегчает жизнь, и получаю одобрение отцов наших)


окуратно по блокам скрывающимся

Гостевое оформление давать для зарегистрированных. Там все на одной странице.

А вообще конечно чем меньше покупатель делает кликов, тем лучше. Иной раз такие кадры встречаю.........


блок языков с иконками

themes\шаблон\source\boxes\languages.php

в коде. если картинки иконок языков в другом формате

нужно поправить вот эту строчку

$languages_string .=  ' <a href="' . os_href_link(basename($PHP_SELF), 'language=' . $key.'&'.os_get_all_get_params(array('language', 'currency')), $request_type) . '"><img src="'._HTTP_THEMES_C.'images/img/'.$key.'.gif" /></a> ';

картинки должны лежать в папке шаблона themes\шаблон\images


Ага. Спасибо ;)


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

address_book.php
address_book_process.php
checkout_success.php
product_reviews_info.php
product_reviews_write.php
product_reviews.php
products_media.php
......но думаю это еще не все

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

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

Из неудобных вещей остаютса атрибуты, например при изменении цены товара, которую изменить не сложно, приходитса каждый раз редактировать атрибуты для каждого товара.

Например мой взгляд как это должно выгледить:

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

Думаю это все что накопилось у меня на это время.

Так что на меня не нужно торопитса с выходом новых версий, а дошлифовать уже готовые решения.

Например к версии 2.6.0 вывести весь HTML код из скрипта в шаблон включая кнопки.
Шаблоны подправить не сложно.


через фильтры уже можно будет в 2.5.2 версии поменять код кнопки на свой

= '<font color="red">Удалить</font>';
 
  return $_value;
}


?>


видимо пару примеров замены одних кнопок на других сделаю. т.к может не очень понятно как это все работает

но тут очень просто

за каждую кнопку отвечает отдельная функция. в которой можно заменить полностью код кнопки, или просто название картинки кнопки.


Например к версии 2.6.0 вывести весь HTML код из скрипта в шаблон включая кнопки.


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



Например к версии 2.6.0 вывести весь HTML код из скрипта в шаблон включая кнопки.


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


тут все очень просто.

на странице. код, который нужно отфильтровать выносим в переменную

$name = apply_filter('filter_name', $name);

а в плагине

//filter_name_func - функция, которая обрабатывает передаваемые данные из переменной $name
add_filter('filter_name', 'filter_name_func');

function filter_name_func($name)
{
    $name =  $name.'вапвап';

    //возвращаем измененную переменную $name
    return $name;
}

если объявляются несколько фильтров в разных плагинах - тогда они выполняются последовательно. по имени плагина, если не указан приоритет :)


Да. Шопос становится все гибче и гибче!
по фильтрованию, было бы не блохо живой пример. Пока не очень понимаю, где можно применить. Например, можно с ценой так что-то сделать?


За кнопки огромное спасибо!



За кнопки огромное спасибо!


:) так это просто ононс. еще 2.4.2 не вышла

вот тут пытаюсь что то описать. но пока что слабо информации

http://www.shopos.ru/forum/index.php?topic=3240.0

можно будет изменять

*)doctype

по умолчанию
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

на свой.

в некоторых шаблонах без этого никак

*)параметры тега <html>

*)все метатеги. можно убрать лишние. изменить последовательность. какой тег за каким идет и т.д

*)метатеги  title, description, keywords

*)фильтровать информацию от статьях
*)фильтр информации о новостях

вот. например внизу новости или статьи можно добавить какой то блок. например закладочник

Мои пожелания...

*) все. кнопки
*) хлебные крошки (Каталог » Lenovo » HP)

*) добавлено событие send_order. и для примера написан плагин для отправки icq сообщения на нужный uin при заказе.
и если успею - сможет отправлять и на jabber

<?php
/*
Plugin Name: Отправляет icq сообщение при заказе товара.
Plugin URI: http://www.shopos.ru/
Description:
Version: 1.0
*/

add_action('send_order', 'send_order_icq');
add_action('process', 'check_icq_connect');

function send_order_icq()
{
  include_once( plugdir() . 'WebIcqLite.class.php' );
  global $order;
 
  $shipping_method = $order->info['shipping_method'];

  $icq = new WebIcqLite();

  if($icq->connect( get_option('icq_uin') , get_option('icq_pass') ))
  {
      $msg_text  = get_option('icq_msg_text');
  $msg_text = str_replace('{$SHIPPING_METHOD}', $shipping_method, $msg_text);
 
  $msg_text =  iconv("UTF-8", "Windows-1251", $msg_text);
 
      if(!$icq->send_message( get_option('icq_uin_to') ,  $msg_text  ))
  {
            //echo $icq->error;
      }
      else
      {
            //echo 'Message sent';
      }
 
      $icq->disconnect();
  }
  else
  {
      echo $icq->error;
  }
 
}

//проверяем, можно ли подключится к icq серверу с такими данными
function check_icq_connect()
{
  global $messageStack;
  include_once( plugdir() . 'WebIcqLite.class.php' );
 
  // echo get_option('icq_uin').'<br>';
//  echo get_option('icq_pass');

  $icq = new WebIcqLite();

  if($icq->connect( get_option('icq_uin') , get_option('icq_pass') ))
  {
      $messageStack->add_session('ok', 'Успешно подключились!');
      $icq->disconnect();
  }
  else
  {
      $messageStack->add_session('Ошибка', $icq->error);
  }
 
}

function send_order_icq_install()
{
  //icq uin с которого шлем
  /* зарегестрируйте свой на icq.com */
  add_option('icq_uin', '565382738');
  add_option('icq_pass', '2020326');
  //номер, на который отправляем
  add_option('icq_uin_to', '379211');
  add_option('icq_msg_text', 'Новый заказ {$order_number}', 'textarea');
 
  return 0;
}

?>


*) можно добавлять изменить все метки страницы карточки товара

вот тут пример http://www.shopos.ru/forum/index.php?topic=3304.0

там добавляется метка {$free_shipping}

*) добавлены события add_cart, remove_cart

при добавлении или удалении товара из корзины можно будет выполнить какой то код.

* на каждую возможность - будет плагин для примера.

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



Например, можно с ценой так что-то сделать?


да. вот пример

<?php

add_filter('build_products', 'build_products_filter');
/*
  в фильтре build_products доступны следующие переменные для редактирования.

например:
    => Apple MacBook MB402
    =>
    =>
    =>
    => 32
    =>
    => http://ваш_сайт/images/product_images/thumbnail_images/../noimage.gif
    => http://ваш_сайт/apple-macbook-mb402.html
    => <font color="red"> 499,50 $</font>
    => 499.5
    =>
    =>  +<a href="http://ваш_сайт/popup_content.php/coID/1" target="_blank" onclick="window.open('http://ваш_сайт/popup_content.php/coID/1', 'popUp', 'toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=1,width=395,height=320'); return false;">доставка</a>
    =>
    =>
    =>
    =>
    =>
    =>
    =>
    =>
    =>
*/
function build_products_filter($value)
{
  //заменить цвет цены на красный.
  $value['PRODUCTS_PRICE'] = '<font color="red">'.$value['PRODUCTS_PRICE'].'</font>';
 
  return $value;
}
?>

выводить все цены красного цвета :)

ну или прочую информацию о товарах на лету изменить.


А такой плагин для изменения цвета цены, можно будет использовать как шаблонный?
Блин. Это можо будет избежать некоторых правок непосредственно ядре. класс!



А такой плагин для изменения цвета цены, можно будет использовать как шаблонный?
Блин. Это можо будет избежать некоторых правок непосредственно ядре. класс!


кака разница?

расширения из modules\plugins\  так же будут работать и из папки themes\шаблон\plugins\

вот только нет автоустановки плагинов шаблона при смене шаблона. без этого никак




вот. например внизу новости или статьи можно добавить какой то блок. например закладочник

Т.е. типо хука будет в шаблоне чето?

вот только нет автоустановки плагинов шаблона при смене шаблона. без этого никак

Дык. оно вроде и не обязательно. Потому, как возможно не все плагины надо будет врубать при смене шаба.



вот. например внизу новости или статьи можно добавить какой то блок. например закладочник

Т.е. типо хука будет в шаблоне чето?

вот только нет автоустановки плагинов шаблона при смене шаблона. без этого никак

Дык. оно вроде и не обязательно. Потому, как возможно не все плагины надо будет врубать при смене шаба.


да. все эти плагины на хуках и работают.

Потому, как возможно не все плагины надо будет врубать при смене шаба.


а как тогда? уже лучше пусть пользователь лишнее отключает. чем наоборот


а как тогда? уже лучше пусть пользователь лишнее отключает. чем наоборот

Понял) Да, действительно не удобно.


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

не выводит flat в быстрый заказ и russianpostpf.

Включены такие способы доставки
flat, ruspost, russianpostpf, selfpickup, sogl

из них выводит только
ruspost, selfpickup, sogl

В оплате включено
cash, cod, soglas, webmoney

выводит только
cash, webmoney

В чем может быть косяк?
Оплата-доставка настроена. у всех доставок указал все оплаты.
Не понятно че делать.


посмотреть в настройках модулей

может где то разрешенные страны, зоны указаны


Сейчас работаю над большим проектом, пока только локально. Товаров в БД порядка 60к.
Заметны сильные тормоза при переходах по страницам категорий  и т.д... тестил и на серваке и локально, естественно.
такое ощущение, что при выводе страницы категории с товарами, скрипт всю базу проверяет.

Очень не удобно выводить рекомендуемые товары. Список из 60к товаров тормозит и страница открывается несколько минут. Было бы не плохо разбить товары по категориям и сделать подгрузку товара в выбранную категорию и добавить поиск товара на AJAX, иначе просто не реально ждать по столько. Да и в списке очень сложно найти что нужно.


Так же при экспорте товара вылетает 504 Gateway Time-out.
Хотя время исполнения скрипта установлено большое. Как такое можно исправить?


При копировании товара в определенные категории или например нужно скопировать ссылку на товар во все категории, то не удобно выбирать все категории в списке(у меня 40 категории). Я туда перекинул Выделить все.

Единственно, что сделал, это скопировал функцию JS
  function SwitchCheck2 ()
  {
    var maf = document.multi_action_form;
    var len = maf.length;
    for (var i = 0; i < len; i++)
    {
      var e = maf.elements;
      if (e.name == "dest_cat_ids[]" || e.name == "multi_products_categories[]")
      {
          if (e.checked == true) {
              e.checked = false;
          } else {
              e.checked = true;
          }
      }
    }
  }
потому. что выбирало вообще все чекбоксы.
Так вот. При копировании все нормально. В чекбоксах имя указано dest_cat_ids.
А вот если делать при удалении, то не могу подцепить multi_products_categories для выделения. Т.к. в имени чекбокса еще и ID товара прописывается. т.е. получается там так multi_products_categories[]
не могу понять как поправить

В categories_view.php это строка
$product_categories_string .= os_draw_checkbox_field('multi_products_categories['.$multi_product.'][]', $product_categories)-1]['id'], true) . '&nbsp;' . $category_path . '<br />';
которая в цикле. Может можно как-то её переделать или в функции JS как то прописать, чтобы работало?


Очень хотелось бы, чтобы Евгений нашел время и доработал оформление заказа.  Магазин только прибавит в юзабилити.
1.Добавить возможность вкл/выкл из админки заполнения все обязательных полей (фамилия, email и т.д....)
2.Сделать чтоб быстрый заказ работал корректно без регистрации и добавить возможность сделать его прямо с карточки товара. (как пример http://www.russsport.ru/index.php?productID=2408)
3.Сделать модуль отправки смс с оповешением о заказе покупателю и менеджеру, что поступил заказ


Разные наблюдения и предложения и пожелания)

1 - Есть много разных мест где выводится товар.
also_purchased.html
articles_xsell.html
cross_selling.html
account.html - просмотренные товары
и т.д....
В них по разному определен вывод данных товара. Например в also_purchased.html название выводиться так - {$module_data.PRODUCTS_NAME}, а в cross_selling.html так - {$products_data.PRODUCTS_NAME}, в аккаунте по свойму и т.д... Очень не удобно постоянно менять module на product и т.д... Почему бы не сделать везде одинаково? Чтобы можно было вывод просто копипастить из файла в файл.

2 - Расширить количество выводимой информации в списках товаров. Т.е. добавить к выводу категорию товара с ссылкой, выводить(опционально) доп поля(если расширить и выводить доп поля по ID. К примеру для вывода у товаров определенного доп. поля, а не всех. Есть у меня правки для вывода доп. полей везде, найду, скину.), выводить атрибуты и т.д... И сделать так во всех местах, где есть списки товаров.

3 - На счет {$error} и подобных - было бы лучше как-то более нормально
например
error - ошибка
attention - внимание, предупреждение...
information - информационный
success - удачно сохранилось, добавилось и т.д...

например

{if $notification!=''}
    error
{elseif}
    attention
{elseif}
    information
{elseif}
    success
{/if}


Сделать для них отдельный файл шаблона, например: notification.html
И в него запихнуть все, что есть. И потом в шаблонах его вызывать где нужно, например так
{if $notification!=''}
    {$notification}
{/if}


4 - Из соображений удобства) Отделить валюту от стоисомти т.е. 500 руб- сделать для 500 свой тег {$price} и для руб свой тег {$cur}(как пример) имхо, так было бы удобнее для верстки) а то нужно лазить в prices.php или как он там называется, и там править вывод.

5 - Было бы не плохо вынести в шаблон карточки товара иконки и ссылки Печати и Задать вопрос о товаре.
В большинстве случает я делаю их ссылками и меняю им вид. В данном случае, у них нету ни класса ни id.
И при обновлениях очень часто забываю их изменить. А обновления делаю постоянно, потому как куча клиентов и у всех версии разные.

6 - Отзывы имеют кучу файлов для различного вывода.
например
product_reviews.html
product_reviews_info.html
product_reviews_write.html
products_reviews.html
reviews.html

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

Например
<div class="что-то тут">
<h2>Тут заголовок</h2>
тут контент
</div>


Собственно, если все шаблоны отзывов засунуть один. что получить?
<div class="что-то тут">
<h2>Тут заголовок(можно тоже чере IF)</h2>

{if product_reviews.html}
content here
{/if}
{if product_reviews_info.html}
content here
{/if}
{if product_reviews_write.html}
content here
{/if}
{if products_reviews.html}
content here
{/if}
</div>


Т.е. кода получается меньше, файлов шаблона тоже меньше.
Если нам нужно сделать совсем разны вывод информации, то смарти дает нам эту возможность.
Вообще очень много файлов которые можно было бы соединить и тем самым сократить и код и само количество этих файлов.

7 - В файле checkout_confirmation.html какой-то замут с формой подтверждения.
Закрывающий тег </form> привязан к кнопке {$CHECKOUT_BUTTON}

Там же блоки {$PRODUCTS_BLOCK} и {$TOTAL_BLOCK} не вынесены в шаблон.

У правил на той же страницы ссылка в виде тега {$REVOCATION_LINK}. Может лучше ссылкой простой состоящей из двух тегов {$link} и {$title}?

8 - У модуля FAQ, на странице вывода списков постраничности, только {$NAVIGATION_BAR}, который выводит обе строки.
В ссылке на другие вопросы ответы не выводит из ленга тег {#other_faq#}

9 - В боксе box_articles_new.html нет вывода даты. Раздел был бы тоже не плох.

10 - Можно было бы создать один файл с формой заполнения и потом его вызывать где нужно.
Через {if} прятать не нужные поля на определенных страницах.
Например где у нас есть формы? регистрация гостя, обычная регистрация, адреса, доставка, оплата, аккаунт, партнерка...
гибкость не потеряется. так как можно будет через те же условия в смарти делать какие угодно стили.
А файлов убивилось бы много. Поля то для заполнения по сути одни и теже везде. А получается мартышкин труд, куча файлов с одинаковым кодом который нужно постоянно изменять.

11 - Не удобно выводятся адреса - {$ADDRESS_DEFAULT}
Они все блоками. Нету возможности изменять вывод.

12 - Заголовки блоков в шаблоне практически все разные. Если мы при подключении языкового файла в блок
указываем секцию, то смысл использовать разные заголовки? просто {#box_title#} или в таком роде, было бы лучше.

13 - По поводу всяких {$NAVIGATION_BAR} {$NAVIGATION_BAR_PAGES}
Почему бы не называть их везде одинаково? Да и расширить возможности.
Как это например реализовано в LiveStreet. Там один файл paging.tpl В котором полная настройка вывода пагинации.
Сделать отдельный файл и вызывать его где нужно. так более удобно и гибко. можно было бы вообще изменять вид вывода постраничности. делать select менюшки или прикручивать что-то на JS.

14 - файлы шаблонов
checkout_payment_address.html
checkout_shipping_address.html
несут одну и ту же функцию. Возможно объединение их в один шаблон. Они одинаковы на 99%
У этих же файлов нет возможности настроить шаблон вывода {$BLOCK_ADDRESS}, что не мало важно!

Вообще все эти файлы выбора доставки и оплаты практически одинаковы.
Можно было бы просто проверять на какой сейчас старнице и ставить условие на вывод.
Например
{if $BILLING_ADDRESS=='true'}
тут все про оплату
{/if}
{if $SHIPPING_ADDRESS=='true'}
тут все про доставку
{/if}
Там между ними разница только в паре слов. А файлов шаблона аж 6 штук
Может так можно было бы сократить заодно и количество шагов заказа.

То же самое и
ask_a_question.html
ask_a_question_ok.html
после обработки формы, можно было бы информацию из файла ask_a_question_ok.html выводить в ask_a_question.html

То же саоме и
password_double_opt_in.html
password_messages.html

Все, что написано выше - ИМХО. Возможно где-то глупо или написано в ночное время суток) Но, возможно, что будет и полезно ;)


присоединяюсь к выше перечисленому!!!!!

меня еще интересует смена цены(динамическая), при выборе атрибута товара, что б автоматом цена минялась


Поправил URL - если есть символ какой-то в титле, например ®, то перекидывает на главную страницу.



Поправил URL - если есть символ какой-то в титле, например ®, то перекидывает на главную страницу.


не все символы в url можно использовать


Плохо. Прайсы обычно попадаются огромные. по несколько десятков тысяч товаров. И каждый заголовок проверить на символы лишнии не получается.
Правда ЧПУ не везде используется.

Еще нашел проблему в том, что если и в шаблоне и в папке modules/plugins есть одинаковые плагины, то ошибка. Может можно как-то сделать, чтобы они не конфликтовали?


Так же не включаются плагины которые в шаблоне с кнопки Установить. Только если нажать у плагина на зеленый шарик в строке.


Можно сделать так, чтобы jQuey все время вызывался на страницах магазина?


Было бы не плохо в редактировании категории устанавливать шаблон карточки товара.
Сейчас там только выбор шаблона для листинга категорий и листинга списков товаров, а вот назначать там еще и шаблон карточки товара- было бы вообще супер.



Можно сделать так, чтобы jQuey все время вызывался на страницах магазина?


можно

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


Источник



Copyright ShopOS