воскресенье, 30 марта 2014 г.

Вставляем фото в каталог продуктов в админке

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

Решение:

1) в файле /published/SC/html/scripts/templates/backend/categories_products.html

вначале файла добавляем

<link rel="stylesheet" href="{$smarty.const.URL_ROOT}/3rdparty/highslide/highslide.css" type="text/css" />
    <script type="text/javascript" src="{$smarty.const.URL_ROOT}/3rdparty/highslide/highslide.js"></script>
    <script type="text/javascript">    
        hs.graphicsDir = '{$smarty.const.URL_ROOT}/3rdparty/highslide/graphics/';
        hs.registerOverlay(
            {ldelim}
                thumbnailId: null,
                overlayId: 'controlbar',
                position: 'top right',
                hideOnMouseOut: true
            {rdelim}
        );
        hs.outlineType = 'rounded-white';
    </script>

после

<td><a href="{$product_url}">{$GridRows[i].product_code|escape:'html'}&nbsp;</a></td>

добавляем код

<td>{if $GridRows[i].thumbnail}<a target="_blank" onclick="return hs.expand(this)" href='{$smarty.const.URL_PRODUCTS_PICTURES}/{if $GridRows[i].big_picture}{$GridRows[i].big_picture|escape:'url'}{else}{$GridRows[i].picture|escape:'url'}{/if}'><img src="{$smarty.const.URL_PRODUCTS_PICTURES}/{$GridRows[i].thumbnail|escape:'url'}" /></a>{/if}</td>

2) в /published/SC/html/scripts/modules/test/_methods/b_categories_products.php

добавляем ПОСЛЕ

$gridEntry->registerHeader("prdset_product_code", 'product_code', false, 'asc');

строку

$gridEntry->registerHeader("prdset_product_picture");

Хотела еще добавить сортировку по наличию и отсутствию фото, но не осилила
Так не работает

$gridEntry->registerHeader("prdset_product_picture", 'product_picture', false, 'asc');


Переделываем Есть вопросы? в форму быстрого заказа

Вид на сайте:

Письмо на почту:

Чтобы получить
1) меняем содержимое файла /published/SC/html/scripts/templates/frontend/product_details_request.html на:

{if !$CPT_CONSTRUCTOR_MODE}
{if $PAGE_VIEW ne 'printable'}
<div class="pageSeparator"></div>
<a name="product-request"></a>

<p>
    <a name="inquiry"></a>
    {if $sent eq NULL}

    <h2>{"feedback_title_productpage"|translate|replace:"[product_name]":"`$product_info.name`"|escape:'html'}</h2>

<!--    <p>{"feedback_description_general_2"|translate}</p> -->

    {$MessageBlock__prd_request}

    <input name="message_subject" value="{"b_zakaz"|translate}{$product_info.name|escape:'html'}" type="hidden" >
    <input name="productID" value="{$product_info.productID}" type="hidden" >
   
{"str_your_name"|translate}, {"str_your_tel"|translate}<br />
    <input name="customer_name"  value="{$prd_request.customer_name|escape:'html'}" type="text" size="40"><br />

    {"usr_custinfo_email"|translate}<br />
    <input name="customer_email" value="{$prd_request.customer_email|escape:'html'}" type="text" size="40" >


    <p>{"feedback_description_productpage"|translate}<br>
    <textarea name="message_text" cols="100" rows="4">{$product_info.name|escape:'html'} {$product_info.product_code|escape:'html'}
{"str_price"|translate}: {if $product_info.Price <= 0} n/a {else}{$product_info.PriceWithUnit}{/if}</textarea>
</p>
   
    {if $smarty.const.CONF_ENABLE_CONFIRMATION_CODE}
<br />
        <table cellpadding="6" cellspacing="0">
        <tr class="background1">
            <td colspan="2">{"str_enter_ccode"|translate}</td>
        </tr>
<!--        {if $PAGE_VIEW eq 'mobile'} mobile view -->
        <tr class="background1">
            <td colspan="2" align="center">
                <img src="{$smarty.const.URL_ROOT}/imgval.php" alt="code" />
                <br />
                <input name="fConfirmationCode" value="" type="text" >
            </td>
        </tr>
<!--        {else} generic view -->
        <tr class="background1">
            <td align="right">
                <img src="{$smarty.const.URL_ROOT}/imgval.php" alt="code" align="right" />
            </td>
            <td>
                <input name="fConfirmationCode" value="" type="text" style="width:200px;" >
            </td>
        </tr>
<!--        {/if} -->
        </table>
    {/if}

    <p>
    <input type="submit" name="request_information" value="OK">
    </p>

    {else}

    <p><span class=faq style="color: blue; font-weight: bold;">{"feedback_msg_sent_successfully"|translate}</span></p>

    {/if}
{/if}
{else}
    <h2>{"feedback_title_productpage"|translate|replace:"[product_name]":"`$product_info.name`"|escape:'html'}</h2>

    <p>{"feedback_description_general_2"|translate}</p>
   
    ...
{/if}

2) создаем локализацию str_your_tel - контактный телефон
    и меняем значение у feedback_description_productpage - Дополнительно можете указать время и адрес доставки.
    а еще можно добавить слова БЫСТРЫЙ ЗАКАЗ до названия товара в тему письма, чтобы можно было легко их найти. Это локализация b_zakaz - БЫСТРЫЙ ЗАКАЗ

среда, 26 марта 2014 г.

WASS каталог товаров таблицей и всплывающие фото

1) Убираем старый файл /published/SC/html/scripts/templates/frontend/product_brief.html (для этого достаточно добавить в название old).

2) Создаем новый product_brief.html с содержанием
{* product brief view (from a category or search) *}
{if $product_info ne NULL}
{if $product_info.slug}
{assign var=_product_url value="?ukey=product&productID=`$product_info.productID`&product_slug=`$product_info.slug`"|set_query_html}
{else}
{assign var=_product_url value="?ukey=product&productID=`$product_info.productID`"|set_query_html}
{/if}
{if $widget}{assign var=_form_action_url value="&view=noframe&external=1"}{/if}
<form class="product_brief_block" action='{"?ukey=cart`$_form_action_url`"|set_query_html}' method="post" rel="{$product_info.productID}" {if $widget}target="_blank"{/if}>
    <input name="action" value="add_product" type="hidden" />
    <input name="productID" value="{$product_info.productID}" type="hidden" />
    <input class="product_price" value="{$product_info.PriceWithOutUnit|escape:'html'}" type="hidden" />
    {assign var=_cnt value=''}
 

    <table cellpadding="0" cellspacing="0" border="0" width="100%">
<tr>
    {if $product_info.product_code && $smarty.const.CONF_ENABLE_PRODUCT_SKU}
    <td style="width:100px">{$product_info.product_code|escape:'html'}</td>{/if}
<td>
<img src="{$smarty.const.URL_PRODUCTS_PICTURES}/camera.png" onmouseover="TagToTip('imgTip{$product_info.productID}')" onmouseout="UnTip()">
<div id="imgTip{$product_info.productID}"><img src="{$smarty.const.URL_PRODUCTS_PICTURES}/{$product_info.picture}" /></div>
</td>
<td style="width:250px"><div class="prdbrief_name"><a {$target} href='{$_product_url}'>{$product_info.name|escape:'html'}</a></div></td>
<td><div class="prdbrief_price"><span class="totalPrice">{$product_info.PriceWithUnit}</span></div></td>
<td>{if $product_info.ordering_available && $product_info.Price>0 && ( $smarty.const.CONF_SHOW_ADD2CART eq 1 ) && ( $smarty.const.CONF_CHECKSTOCK==0 || $product_info.in_stock > 0 ) }
    <div class="prdbrief_add2cart"><input type="image" src="{$button_add2cart_small}" alt="{'str_add_to_cart_string'|translate}" title="{"str_add_to_cart_string"|translate}"
    {if $smarty.const.CONF_SHOPPING_CART_VIEW ne $smarty.const.SHCART_VIEW_PAGE && !$widget} class="add2cart_handler" rel="{if $widget}widget{/if}" {/if} /></div>
    {elseif $smarty.const.CONF_SHOW_ADD2CART eq 1 && $smarty.const.CONF_CHECKSTOCK && !$product_info.in_stock && $product_info.ordering_available}
    <div class="prd_out_of_stock">{lbl_prd_out_of_stock}</div>{/if}</td>
    {if $PAGE_VIEW ne 'mobile' &&  $product_info.allow_products_comparison && $show_comparison}  {* removed ' && $categoryID == $product_info.categoryID' *}
<td><div class="prdbrief_comparison">
        <input id="ctrl-prd-cmp-{$product_info.productID}" class="checknomarging ctrl_products_cmp" type="checkbox" value='{$product_info.productID}' />
        <label for="ctrl-prd-cmp-{$product_info.productID}">{"prd_select_to_comparison"|translate}</label></div></td>{/if}
    </tr></table>
</form>
{/if}

3) скачиваем скрипт http://www.walterzorn.de/en/tooltip/tooltip_e.htm#download
и помещаем в папку /published/SC/html/scripts/js/

4) в файле /published/SC/html/scripts/templates/frontend/category.tpl.html (+category_search.html
category_search_result.tpl.html) подключаем скрипт для работы всплывающей фотографии

<script type="text/javascript" src="/published/SC/html/scripts/js/wz_tooltip.js"></script>

5) не забываем добавить файл camera.png  в папку /published/publicdata/base_name/attachments/SC/products_pictures/

6) можно добавить заголовки у колонок

Результат (при наведении на фотоаппарат появляется превью товара, первая загруженная):
1395841207-clip-66kb

суббота, 15 марта 2014 г.

Закончен переезд сайтов!

С начала своей деятельности в сети испробовала несколько платформ для размещения статей. 4 года назад, когда только ушла в декрет начала писать статьи и размещала их на Народ.ру. Спустя 3-4 месяца Народ уже не устраивал, но деньги на хостинг тратить не хотелось и выбор пал на бесплатное размещение на платформе-конструкторе Укоз. Там немного освоилась с html и способами монетизации сайтов. Через 1.5 года этого тоже оказалось недостаточно. О недостатках Укоз я писала в этом посте.
Следующий выбор был в пользу MODx Revo. Выбирала исходя из отзывов других вебмастеров, рейтингов движков. Писали, что легок в управлении, гибкий и подходит для сложных проектов (порталы, доски объявлений и проч.). На деле же оказалось несколько тяжеловато. При том, что можно прикрутить абсолютно любой дизайн, даже содранный с другого сайта, его нужно было разбивать на чанки. Разбираться со сниппетами и плейсхолдерами. Найти приличные сниппеты даже для простой доски объявлений оказалось затруднительно. Окончательно подорвало веру в движок то, что из-за неверной генерации ссылок разрослась структура у сайтов и это сильно понизило их в выдаче. 
Теперь я перевела все сайты на Drupal 7. В отзывах было, что он сложный для начинающих. Но по факту мне с ним на порядок проще работать, чем с MODx. 
Сегодня переношу последний сайт. Он прошел весь этот путь, т.к. он был самый первый.
Все эти переезды и смены урл страниц его постоянно подкашивали. 2 раза терялся ТИЦ, посещаемость падала до 10 чел. в сутки.
Надеюсь это всё!
Ненавижу переезды как в жизни, так и в виртуале. Геморно, хлопотно и где-то ложки потеряешь.

четверг, 6 марта 2014 г.

Drupal 7 похожие материалы к статье без заморочек

Искала возможность вывести похожие материалы к статье и встречала разные модули и настройки к ним. В частности поставила Views, но не подружилась с ним, т.к. по мануалу все настроила, 3 ссылки на статьи получила, но они были везде одинаковые. Может у меня руки не правильно приделаны)
Но вот нашла вполне подходящий и легкий способ. С помощью сниппета
В файл template.php вашей темы нужно вставить этот код:

function [THEMENAME]_preprocess_node(&$vars) {
  if (!$vars['page'] || !$vars['node'] || !isset($vars['field_tags']) || !count($vars['field_tags'])) {
    return;
  }
 
  $tids = array();
  foreach ($vars['field_tags'] as $tag) {
    $tids[] = $tag['tid'];
  }
 
  $query = db_select('node', 'n');
  $query->fields('n', array('nid', 'title'));
  $query->addExpression('COUNT(*)', 'hits');
  $query->leftJoin('taxonomy_index', 'ti', 'n.nid = ti.nid');
  $query->condition('n.type', $vars['type']);
  $query->condition('n.status', NODE_PUBLISHED);
  $query->condition('ti.tid', $tids, 'IN');
  $query->condition('n.nid', $vars['nid'], '<>');
  $query->groupBy('n.nid');
  $query->orderBy('hits', 'DESC');
  $query->orderBy('n.created', 'DESC');
  $query->range(0, 3);
 
  $vars['content']['similar'] = node_title_list($query->execute(), 'Похожие материалы');
  $vars['content']['similar']['#weight'] = 2;
}
При этом [THEMENAME] нужно заменить на название вашей темы, а field_tags на ваш словарь таксономии.
И еще у меня в этом файле уже был кусок кода с function [THEMENAME]_preprocess_node(&$vars) и чтобы не вышло ошибок и пустого листа нужно вставить дополнение после окончания того куска. И удалить закрывающую скобку того куска и у вставляемого удалить function [THEMENAME]_preprocess_node(&$vars) {
Надеюсь понятно)

суббота, 1 марта 2014 г.

Итоги февраля 2014

ПРИХОД:
Google Adsense 1,50 $
Mainlink.ru  40,88 руб.
Liex.ru - 0.05 $ (перестали поступать заявки на временное размещение статей).
Партнерка интернет-магазина товаров для ремонта -
RotaBan - 

Биржа контента Etxt (реф) 36,07 руб.
РАСХОД:
покупка статей 61,62+94,43+197,6+133=289,05 руб.