Категории |
Мои пожелания...Евгений, почему бы не почистить шаблоны от лишних файлов? Евгений, почему бы не почистить шаблоны от лишних файлов? НАпример файлы 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. По блоках, можна и самому править, так как все блоки в шаблоне формируютса. Есть возможность даже зделать один шаблон для всех боксов. По 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 и т.д... Еще вот что подумал. + Там есть ЧПУ нормальное. Вроде как в шопосе не везде формируется норм. ЧПУ. а нормальное - это какое? а что делать если эти шаблоны нужно сделать разными? можно на лету проверять какие шаблоны есть, каких нет - и замещать шаблоны, которых нет - похожими шаблонами. Вот тут нужно продумать эту систему. Я собственно имел ввиду объединить файлы некоторые. Как например сделано в 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 добавляем свои идеи и пожелания на вкладке "Оставьте свой отзыв'. Евгений, а нет возможности как то определять на какой страницы сейчас находишься, через смарти? На реформале думаю этому не место. На реформале думаю этому не место. Вывод производителей в листинге товара не очень удобен. Если бы выводить его в шаблон через 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} Что-то не получилось. {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} в листинге товаров тоже работает {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;"> </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"> {$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> кэш стоит почистить. может в нем дело Не. коды то работают замечательно. {if $smarty.foreach.aussen.iteration+2 gt $smarty.foreach.aussen.total} {foreach name=aussen item=module_data from=$module_content} а вот это {if $smarty.foreach.aussen.iteration % 2 == 1}{else}border-left{/if} проще записать вот так {if $smarty.foreach.aussen.iteration % 2 == 0}border-left{/if}
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? Все. На свежую голову придумалось. Не допер сначала до этого варианта)) {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} Евгений, спасибо за подсказки!!! Евгений. Создание настроек шаблона. 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 скорее всего за настройки шаблона будет отвечать плагин шаблона themes/шаблон/plugins/setting.php но опять же - сложный вопрос. как бы через пару версий не пришлось убирать А зачем убирать? Вещь полезная и нужная. как в WP реализовать. Т.е. создатель шаба может врубить эти настройки. И они будут в меню Настройки - Шаблоны - Настройки шаблона, к примеру. в админке на странице плагинов сначала будет список плагинов для всего магазина, потом список для текущего шаблона. Кстати. Сложно будет сделать там категоризацию плагинов? Например: блоки, система, включенные, выключенные и т.д... А категорию уже задавать в настройках плагина. Т.е. разделить включенные, выключенные только. Остальные просто с пометкой категории будут И прилепить сортировку какую-то ;D Эт сейчас мало плагинов, в будущем будет то много. Ну и разделить сразу плагины шаблона от плагинов остальных. Только не понятно какие плагины будут у шабллона? Т,е. будет простая категоризация. отделение плагинок шаблона по категории. за метки {$1} {$2} {$3} скорее всего тоже какой то шаблонный плагин будет отвечать. ничего на скорую руку набросать не получится. Ага. ченить такое придумать. как только? Чет не оч представляю себе в виде плагина. Несколько предложений и поправок для шаблона. <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 сколько уже всего накопилось((( ;) {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 Угу.
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; } Спасибо большое. Работает как нужно. 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).'" >«</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).'" >»</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','Последняя »'); define('TEXT_FIRST_PAGE','« Первая'); Получилось так Единственное, что не смог придумать как сделать: вывести общий список страниц(типо: Всего страниц: 23), возможность перехода на нужную. Простой input в который пишешь например 5 и нажимаешь ОК и переходишь на пятую страницу. А то например на страницу 1567 не попасть ;D разное - статистика - просмотренные товары Можно и так. очень удобно будет я думаю. а если вот так ? или вообще убрать перечисление страниц Можно убрать перечисление в принципе, оставить только select и кнопки для перехода на Следующую\Предыдущую и Первая\Последняя. вот что получилось 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> </td> <td> </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> </td> <td> </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 или вот с выпадающим списком Огромное спасибо ;D Или блоки. Блок категорий как-то оптимизировать. Кушает запросов много, да и править его не удобно. это уже сделано. 2 запроса на блок категорий вместо тысяч в этом месяце выйдет обновление. я недавно забабахал бокс категорий, 1 запрос, выполнение 0.1 - 0.2 с. Или блоки. Блок категорий как-то оптимизировать. Кушает запросов много, да и править его не удобно. это уже сделано. 2 запроса на блок категорий вместо тысяч в этом месяце выйдет обновление. я недавно забабахал бокс категорий, 1 запрос, выполнение 0.1 - 0.2 с. :) можно и без единого запроса сделать. запрос будет, но он будет выполнятся не тогда, когда пользователи открывают магазин. всю выборку из базы по категориям скидывать в кэш. и кэш обновлять только при изменении данных о категориях. тут некоторые вещи так и реализованы (редкообновляемый кэш хранится в папке cache\system\) но начинаются проблемы, когда категорий много. да и еще нужно понимать под какие ресурсы нужно оптимизировать. если у хостера медленная дисковая подсистема (на дешевых хостингах обычно так и бывает) - выдергивание кэша из файлов будет убивать много времени. нужно смотреть как быстрее работает - данные брать из базы или из кэша на диске. а с нагрузкой на процессор и потребления оперативной памяти еще сложнее. пожалуйста! и еще я всегда говорю теперь - делайте все проще и понятней, не надо мудрить, сильно облегчает жизнь, и получаю одобрение отцов наших) окуратно по блокам скрывающимся Гостевое оформление давать для зарегистрированных. Там все на одной странице. А вообще конечно чем меньше покупатель делает кликов, тем лучше. Иной раз такие кадры встречаю......... блок языков с иконками Ага. Спасибо ;) И так, полностью все проанализировал на счет кнопок, в принципе можна везде замены зделать кроме пары файлов (не могу там определьть ID товара через смарти) через фильтры уже можно будет в 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\ вот только нет автоустановки плагинов шаблона при смене шаблона. без этого никак вот. например внизу новости или статьи можно добавить какой то блок. например закладочник Т.е. типо хука будет в шаблоне чето? вот только нет автоустановки плагинов шаблона при смене шаблона. без этого никак Дык. оно вроде и не обязательно. Потому, как возможно не все плагины надо будет врубать при смене шаба. вот. например внизу новости или статьи можно добавить какой то блок. например закладочник Т.е. типо хука будет в шаблоне чето? вот только нет автоустановки плагинов шаблона при смене шаблона. без этого никак Дык. оно вроде и не обязательно. Потому, как возможно не все плагины надо будет врубать при смене шаба. да. все эти плагины на хуках и работают. Потому, как возможно не все плагины надо будет врубать при смене шаба. а как тогда? уже лучше пусть пользователь лишнее отключает. чем наоборот а как тогда? уже лучше пусть пользователь лишнее отключает. чем наоборот Понял) Да, действительно не удобно. В быстром заказе отображение не всех способов доставки и оплаты. вообще с этим замут там какой-то. посмотреть в настройках модулей Сейчас работаю над большим проектом, пока только локально. Товаров в БД порядка 60к. Так же при экспорте товара вылетает 504 Gateway Time-out. При копировании товара в определенные категории или например нужно скопировать ссылку на товар во все категории, то не удобно выбирать все категории в списке(у меня 40 категории). Я туда перекинул Выделить все. Очень хотелось бы, чтобы Евгений нашел время и доработал оформление заказа. Магазин только прибавит в юзабилити. Разные наблюдения и предложения и пожелания) {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 можно использовать Плохо. Прайсы обычно попадаются огромные. по несколько десятков тысяч товаров. И каждый заголовок проверить на символы лишнии не получается. Так же не включаются плагины которые в шаблоне с кнопки Установить. Только если нажать у плагина на зеленый шарик в строке. Можно сделать так, чтобы jQuey все время вызывался на страницах магазина? Было бы не плохо в редактировании категории устанавливать шаблон карточки товара. Можно сделать так, чтобы jQuey все время вызывался на страницах магазина? можно тут же где то были примеры как в head добавлять свои теги. |
|