Перейти к содержанию
Официальный форум поддержки Simpla

Al_Ary

Пользователь
  • Публикаций

    24
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные Al_Ary

  1. Есть давно работающий сайт на Simpla, в котором около 1500 заполненных товаров с описаниями и картинками. 

     

    Есть отдельно стоящая 1С которая привязана к кассе. Т.е. при продаже товара в 1С со склада списывается товар. 

     

    Задача: надо как-то связать магазин с 1С, чтобы было актуальное наличие товаров. Если можно алгоритм работы по пунктам. external_id у всех пустые. 

  2. Всё равно спасибо :)

     

    Ха красавчик!
    Я даже и забыл что такое постил)

    Только не работает подсветка активного фильтра в вашем варианте, но это уже сам поправил.

  3. Захожу в бренд, фильтр по свойствам пропадает. 

     

    Как сделать чтобы работал? Я так понимаю он привязан к категории товара? На сайте одна категория, навигация только по брендам.

     

    Грубо говоря надо сделать чтобы он появлялся даже на странице /products

  4. Способ 1:

     

    {($v->price|convert:null:false)|floor} РУБ

    {(($v->price|convert:null:false)*100-(($v->price|convert:null:false)|floor)*100)|floor} КОП

     

    Способ 2:

    {$price2=explode('.',$v->price|convert:null:false)}

    {$price2.0} РУБ {$price2.1} КОП

    Второй способ не корректно работает, если у копеек десятичное значение. Например 50 копеек выводит как 5 копеек. Первый рабочий полностью, спасибо!

  5. Спасибо, пунк 1 работает, а вот по второму наверное не совсем понятно вопрос задал, попытаюсь пояснить. Надо выводить цену так, чтобы в шаблоне было как бы два тега: один для целых, второй для долей:

    Цена: {$рублей} руб. {$копеек} к.
    

    Если поставить вывод копеек в админке цена выводится просто 65.5 руб.

  6. 1. Как выводить в товаре вывод цены сразу в двух валютах, например:65 руб 1 $ ?

     

    {$price|convert:USD} — возвращает 0, {$v->price|convert:USD} — возвращает ошибку смарти.

     

    2. Как выводить только рубли и только копейки? Например: 65 руб. 50 к.

  7. Столкнулся с шаблоном, в котором надо выводить отдельно день, месяц и год. Причём месяц буквами на русском, сделал так, но чё-то мне подсказывает, что есть более изящное решение  :rolleyes:

    <div class="news-date">
         <p class="news-date-day">{$post->date|date_format:"%e"}</p>
         <p class="news-date-month">
    	{if $post->date|date_format:"%m" == 01}января{/if}
    	{if $post->date|date_format:"%m" == 02}февраля{/if}
    	{if $post->date|date_format:"%m" == 03}марта{/if}
    	{if $post->date|date_format:"%m" == 04}апреля{/if}
    	{if $post->date|date_format:"%m" == 05}мая{/if}
    	{if $post->date|date_format:"%m" == 06}июня{/if}
    	{if $post->date|date_format:"%m" == 07}июля{/if}
    	{if $post->date|date_format:"%m" == 08}августа{/if}
    	{if $post->date|date_format:"%m" == 09}сентября{/if}
    	{if $post->date|date_format:"%m" == 10}октября{/if}
    	{if $post->date|date_format:"%m" == 11}ноября{/if}
    	{if $post->date|date_format:"%m" == 12}декабря{/if}
    	</p>
         <p class="news-date-year">{$post->date|date_format:"%Y"}</p>
    </div>
    
    

    Что-то не нашёл как использовать case в smarty.

     

  8. пытаюсь создать копию тех товаров, что не открываются. В итоге эти же копии также скидывают на главную. Странно все как-то ((

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

  9. ostrun, если бренды только на главной, то искать надо в main.tpl, если на всех страницах снизу, то искать надо в index.tpl

     

    ищите строку

    {foreach $all_brands as $b}    
    

    Возможно, вы делаете правки не в том шаблоне, который активен?

  10. Вдогонку сопутствующий вопрос - как показывать цену на странице товара, даже если товар кончился?

    В этом случае $product->variants перестает содержать данные - в том числе и цену при выводе данных в product.tpl и product_block.tpl

    Где это в коде логичнее поправить?

    Для этого надо чуть-чуть поломать api  :)

    В файле api/Variants.php находим

    $variant_id_filter = $this->db->placehold('AND (v.stock>0 OR v.stock IS NULL)');
    

    И добавляем, чтобы и при нулевом значении, тоже думало, что товар in_stock, вот так:

    $variant_id_filter = $this->db->placehold('AND (v.stock>0 OR v.stock IS NULL OR v.stock = 0)');
    

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

     

    Стандартное:

    {if $product->variants|count > 0}
    <!-- Выбор варианта товара -->
    <form class="variants" action="/cart">
    <table>
    	{foreach $product->variants as $v}
    	<tr class="variant">
    	<td>
    	<input id="product_{$v->id}" name="variant" value="{$v->id}" type="radio" class="variant_radiobutton" {if $product->variant->id==$v->id}checked{/if} {if $product->variants|count<2}style="display:none;"{/if}/>
    	</td>
    	<td>
    	{if $v->name}<label class="variant_name" for="product_{$v->id}">{$v->name}</label>{/if}
    	</td>
    	<td>
    	{if $v->compare_price > 0}<span class="compare_price">{$v->compare_price|convert}</span>{/if}
    	<span class="price">{$v->price|convert} <span class="currency">{$currency->sign|escape}</span></span>
    	</td>
    	</tr>
    	{/foreach}
    	</table>
    	<input type="submit" class="button" value="в корзину" data-result-text="добавлено"/>
    </form>
    <!-- Выбор варианта товара (The End) -->
    {else}
    	Нет в наличии
    {/if}
    

    Меняем на:

    <!-- Выбор варианта товара -->
    <form class="variants" action="/cart">
    <table>
    	{foreach $product->variants as $v}
    	<tr class="variant">
    	<td>
    	<input id="product_{$v->id}" name="variant" value="{$v->id}" type="radio" class="variant_radiobutton" {if $product->variant->id==$v->id}checked{/if} {if $product->variants|count<2}style="display:none;"{/if}/>
    	</td>
    	<td>
    	{if $v->name}<label class="variant_name" for="product_{$v->id}">{$v->name}</label>{/if}
    	</td>
    	<td>
    	{if $v->compare_price > 0}<span class="compare_price">{$v->compare_price|convert}</span>{/if}
    	<span class="price">{$v->price|convert} <span class="currency">{$currency->sign|escape}</span></span>
    	</td>
    	</tr>
    	{/foreach}
    	</table>
    {if $product->variant->stock > 0}
    	<input type="submit" class="button" value="в корзину" data-result-text="добавлено"/>
    {/if}
    </form>
    <!-- Выбор варианта товара (The End) -->
    {if $product->variant->stock = 0}
    	Нет в наличии
    {/if}
    

    Получается удаляем стандартную проверку на заполненность массивна, потому что он у нас в любом случае будет заполнен, и вставляет два условия: в случае если товаров больше чем 0 (if $product->variant->stock > 0) — показываем кнопку заказа, в случае если количество товаров 0, показываем "нет в наличии". 

     

    На мой взгляд решение довольно простое, но возможно с "косяками" :)

  11. Довольно примитивно. Считаться по такой методе будет совсем неправильно...

    Ну начало верное.

     

    Создать ещё одно поле в таблице s_variants.

    Определиться когда товар считается проданным. У кого-то это галочка "оплачен" через админку или автоматом, у кого-то перенос в папку "выполненные".

    По этому событию добавлять в значение, скажем "sales", количество товара из заказа.

     

    Бесплатно кто-то вряд-ли будет реализовывать. Работа не на 5 минут. 

  12. Мы делаем так же, как описывал выше Kors: в файле callback.php нужного метода оплаты, перед тем как списать товар и сразу же после того как проставляем статус "оплачено":

    // Установим статус оплачен
    $simpla->orders->update_order(intval($order->id), array('paid'=>1));
    

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

     

    // Отправим уведомление на email
    $simpla->notify->email_order_user(intval($order->id));
    $simpla->notify->email_order_admin(intval($order->id));
    
    // Отправим уведомление на телефон админа
    $admin_phone = $simpla->settings->pz_phones[admin];
    $simpla->smssend->send($admin_phone, 'Заказ №'.$order->id.' на сумму '.$order->total_price.' '.$payment_currency->code.' оплачен.');
    // и телефон клиента
    $simpla->smssend->send($order->phone, 'Ваш заказ №'.$order->id.' на сумму '.$_POST['amount'].' '.$payment_currency->code.' оплачен.');
    

    Функция отправки смс и её реализация описана в соответствующей теме

     

    Отдельно отмечу, что номер телефона администратора подхватываем из админки из настроек сервиса "Простые звонки": 

    $admin_phone = $simpla->settings->pz_phones[admin];
    

    Где admin — логин менеджера.

  13. Чтобы в шаблоне заработали смарти-теги с выводом предыдущей и следующей картинки нужно:

     

    В файле api/Products.php

     

    Найти функцию:

     

    public function get_next_product($id)
    	{
    		$this->db->query("SELECT position FROM __products WHERE id=? LIMIT 1", $id);
    		$position = $this->db->result('position');
    		
    		$this->db->query("SELECT pc.category_id FROM __products_categories pc WHERE product_id=? ORDER BY position LIMIT 1", $id);
    		$category_id = $this->db->result('category_id');
    
    		$query = $this->db->placehold("SELECT id FROM __products p, __products_categories pc
    										WHERE pc.product_id=p.id AND p.position>? 
    										AND pc.position=(SELECT MIN(pc2.position) FROM __products_categories pc2 WHERE pc.product_id=pc2.product_id)
    										AND pc.category_id=? 
    										AND p.visible ORDER BY p.position limit 1", $position, $category_id);
    		$this->db->query($query);
     
    return $this->get_product((integer)$this->db->result('id'));
    	}
    

    Вставить после $this->db->query($query);

     

                    $n=$this->get_product((integer)$this->db->result('id'));
    		if($n != 0){
    			$n->images = $this->get_images(array('product_id'=>$n->id));
    			$n->image = &$n->images[0];
    		        return $n; 
    		}
    

    И закомментировать двумя слешами или удалить строчку:

    // return $this->get_product((integer)$this->db->result('id')); 

    Аналогично сделать для функции get_prev_product, после $this->db->query($query); вставить тот же код, что и выше и удалить последнюю строчку. 

     

    От описанного выше отличается исправлением бага связанного с самым первым и самым последним товаром.

     

    В шаблоне можно использовать:

     

    {$next_product->image->filename|resize:200:200}
    {$prev_product->image->filename|resize:200:200} 
  14. А теперь представь, что тебе необходимо сделать, скажем, надпись шириной в два блока при отображении в четыре блока (последних). Как она у тебя отобразится при ширине в три блока (колонки)? Смысл блоков в том, что при сокращении размера экрана блоки смещаются вниз и надпись, которая по определению должна быть справа у тебя станет снизу. Верстать с нуля таким образом может и удобно, но переделывать под клиента такие верстки - это жопа.

    Таким образом сверстан исключительно блок такблицы с товарами, остальной сайт верстай как хочешь.

  15. ТС, почитай вот эту статью, я на её основе сделал вёрстку. На старых мониках товар в 2 колонки, на буках и относительно не старых в 3, а на Full HD в 4. Получается что на всех мониторах сайт одинаково заполнен и нет пустующего пространства.

  16. Нужно доработать идею. Допустим в новинках

    {get_new_products var=new_products limit=6}
    значение 6, но из шести товаров не нулевая цена только у трёх. Как сделать так чтобы подгружало 6 товаров с ненулевой ценой?

    И вообще, как сделать так, чтобы на сайте нигде (т.е. в products.tpl) тоже не выводились товары с нулевой ценой.
  17. Как сделать дополнительную кнопку в списке товаров категории, при нажатии которой выводятся все товары этой категории без разбиения на страницы.

    Т.е. в pagination.tpl надо после последней страницы вывести кнопочку "все сразу" при нажатии на которую открывается страница со всеми товарами без разбиения на страницы.

    В шаблоне должно выглядеть так:

    [1] [2] [3] вперед? [все сразу]

×
×
  • Создать...