Simplacms - 2 часть

Статус
В этой теме нельзя размещать новые ответы.
А не пробовал отключить токен? Для просмотра ссылки Войди или Зарегистрируйся
Был бы признателен за более подробное описание этой доработки. Тоже заинтересован в ней
я бы не хотел отключать токен. Это вообще, крайность так сказать. Сейчас копаюсь с .htaccess, RewriteRule чтоб доработка могла номально получить URL картинки...
 
Столкнулся со следующей проблемой: подключил fancybox для корректного отображения увеличенных изображений в окне на странице описания продукта, но картинки открываются в новой вкладке и при проверке инспектором через F12 выдает ошибку: Uncaught ReferenceError: jQuery is not defined (jquery.fancybox.pack.js). В чем дело?
 
делал кто-нибудь апселы на симпле?
интересует как на странице корзины вывести товары со скидкой, при условии что в каталоге у этих товаров скидки быть не должно.
 
Что-то вроде доработки). Что то нашел в сети, что-то сам писал
Название: Отдельная страница брендов с выводом изображений, описания и к-ва товара по бренду.

Код функции get_brands_improved_plugin был мной найден в сети. Она мне подошла, решил юзать ее..

В админке, сначала, создайте страницу, бренды, а адресом /brands. Пропишите ей метатеги и татйт и тд.

В .htaccess добавляем:
# Каталог брендов
RewriteRule ^brands/?$ index.php?module=BrandsView [L,QSA]

В конец файла Brands.php добавим новые функции:
public function get_brands_improved($filter = array())
{
$brands = array();
$category_id_filter = '';
if(!empty($filter['category_id']))
$category_id_filter = $this->db->placehold('LEFT JOIN s_products_categories pc ON p.id = pc.product_id WHERE pc.category_id in(?@)', (array)$filter['category_id']);

$query = $this->db->placehold("SELECT DISTINCT
b.id,
b.name,
b.url,
b.meta_title,
b.meta_keywords,
b.meta_description,
b.description,
b.image,
COUNT(p.id) AS `count`
FROM s_brands b LEFT JOIN s_products p ON p.brand_id=b.id $category_id_filter
WHERE p.visible = 1
GROUP BY b.id ORDER BY b.name");
$this->db->query($query);
return $this->db->results();
}

public function count_brands($filter = array())
{
$category_id_filter = '';
$brand_id_filter = '';
$keyword_filter = '';
$visible_filter = '';

if(!empty($filter['id']))
$brand_id_filter = $this->db->placehold('AND b.id in(?@)', (array)$filter['id']);

if(isset($filter['visible']))
$visible_filter = $this->db->placehold('AND b.visible=?', intval($filter['visible']));

if(isset($filter['keyword']))
{
$keywords = explode(' ', $filter['keyword']);
foreach($keywords as $keyword)
{
$kw = $this->db->escape(trim($keyword));
if($kw!=='')
$keyword_filter .= $this->db->placehold("AND (b.name LIKE '%$kw%' OR b.meta_keywords LIKE '%$kw%' OR b.id in (SELECT product_id FROM __variants WHERE sku LIKE '%$kw%'))");
}
}

$query = "SELECT COUNT(distinct b.id) as count
FROM __brands AS b
$category_id_filter
WHERE 1
$brand_id_filter
$keyword_filter
$visible_filter ";

$this->db->query($query);

if($this->db->query($query)) {
return $this->db->result('count');
} else {
return false;
}
}

Правим view/BrandsView.php
<?php

/**
* Simpla CMS
*
* @CopyRight 2011 Denis Pikusov (Simpla CMS developer)
* @Link Для просмотра ссылки Войди или Зарегистрируйся
* @AUTHOR Aleksandr Kuzmenko
*
* Этот класс использует шаблон brands.tpl
*
*/

require_once('View.php');

class BrandsView extends View
{
function fetch()
{

// Количество постов на 1 странице
$items_per_page = max(1, intval($this->settings->products_num));

$filter = array();

// Текущая страница в постраничном выводе
$current_page = $this->request->get('page', 'integer');

// Если не задана, то равна 1
$current_page = max(1, $current_page);
$this->design->assign('current_page_num', $current_page);

// Вычисляем количество страниц
$brands_count = $this->brands->count_brands($filter);

// Показать все страницы сразу
if($this->request->get('page') == 'all')
$items_per_page = $brands_count;

$pages_num = ceil($brands_count/$items_per_page);

// Передаем в шаблон
$this->design->assign('total_pages_num', $pages_num);
$this->design->assign('total_brands_num', $brands_count);

$filter['page'] = $current_page;
$filter['limit'] = $items_per_page;

// Выбираем бренды из базы
$brands = $this->brands->get_brands($filter);
if(empty($brands)) {
return false;
}

// Передаем в шаблон
$this->design->assign('brands', $brands);

// Метатеги страницы
if($this->page) {
$this->design->assign('meta_title', $this->page->meta_title);
$this->design->assign('meta_keywords', $this->page->meta_keywords);
$this->design->assign('meta_description', $this->page->meta_description);
}

return $this->design->fetch('brands.tpl');
}
}

Регистрируем плагин.. в view/View.php
~100 строка:
$this->design->smarty->registerPlugin("function", "get_brands_improved", array($this, 'get_brands_improved_plugin'));

Ниже пишем эту самую функцию (get_brand_products_count_plugin)

public function get_brands_improved_plugin($params, &$smarty)
{
if(!isset($params['visible']))
$params['visible'] = 1;
if(!empty($params['var'])) {

$min = 0; $max = 0;
$steps = 5; //делаем 5 градаций веса

if(!isset($params['steps']))
$steps = max($steps, $params['steps']);

$brands = $this->brands->get_brands_improved($params);
//вычисляем наибольшее и наименьшее значение
foreach($brands AS $v) {
if(!$max || $max < $v->count) $max = $v->count;
if(!$min || $min > $v->count) $min = $v->count;
}
$range = log($max + 1) - log($min + 1);
if(!$range) $range = 1;
//расставляем веса к каждому бренду
foreach($brands AS $v)
$v->weigth = round((log($v->count + 1) - log($min + 1)) * $steps / $range);

$smarty->assign($params['var'], $brands);
}
}

и теперь выводим все в шаблоне у себя..
.....
{get_brands_improved var=all_brands}
{if $all_brands}
<div class='col-md-24 well well-sm paginationProductsView'>{include file='x_included_pagination.tpl'}</div>
<div class="clearfix"></div>

<ul class="row list-inline itemsList">
{foreach $all_brands as $b}
<li class="col-lg-6 col-md-8 col-xs-12">
<div class="brand">
{if $b->image}
<div class="image">
<a href="brands/{$b->url}" title="Переглянути товари від {$b->name|escape}"><img src="{$b->image|resize_okaycms:145:70:false:$config->brands_resized}" alt="{$b->name|escape}"/></a>
</div>
{/if}
<h3><a data-brand="{$b->id}" href="brands/{$b->url}" title="{$b->name|escape}">{$b->name|escape|truncate:50:'...'}</a></h3>
<div class="caption">

{if $b->description}
<p>{$b->description|strip_tags|truncate:131:'...'}</p>
{/if}

{if $b->count}
<p>Всього товарів: {$b->count} </p>
{/if}

<div class="clearfix">
</div>
</div>
</div>
</li>
{/foreach}
</ul>

{else}
<div class="alert alert-warning alert-dismissable" style='margin:50px 0 300px'>
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
<p><strong>Увага!</strong></p>Зараз у даному розділі немає пропозицій. Можливо список знаходиться на редагуванні.<br />Спробуйте зайти пізніше.
</div>
{/if}
.....


Пример работы: Для просмотра ссылки Войди или Зарегистрируйся
 
делал кто-нибудь апселы на симпле?
интересует как на странице корзины вывести товары со скидкой, при условии что в каталоге у этих товаров скидки быть не должно.
очень легко - в каталоге показывать обычную цену {$v->price|convert}
а в корзине со скидкой - {if $v->compare_price > 0}{$v->compare_price|convert}{else}{$v->price|convert}{/if}
где $v - вариант товара
 
очень легко - в каталоге показывать обычную цену {$v->price|convert}
а в корзине со скидкой - {if $v->compare_price > 0}{$v->compare_price|convert}{else}{$v->price|convert}{/if}
где $v - вариант товара

помойму не совсем то. должен быть дополнительный блок с товарами, который появляется когда переходишь к оформлению заказа. в блоке выводятся например 3 товара со скидкой, которые можно доложить в корзину
 
Вопрос по выгрузке изображений из 1с управление торговлей в магазин на Simpla. В 1с УТ в хранилище дополнительной информации у меня в конкретной номенклатуре есть фото товаров. Фотографий несколько и одна из них основная. При выгрузке товаров выгружается только основная фотография:
Код:
<Картинка>import_files/8d/8d39dd47-8904-11e5-82f4-001a7dda7113.jpeg</Картинка>
У меня какие-то неполадки, или выгрузка так и должна работать?
 
На страницах продуктов изображения вставляются примерно так:
<img src="{$product->image->filename|resize:300:500}" />
Получается ссылка на миниатюру. А каким образом вставить оригинал? Вообще не могу понять, уже все варианты перепробовал :)
 
На страницах продуктов изображения вставляются примерно так:
<img src="{$product->image->filename|resize:300:500}" />
Получается ссылка на миниатюру. А каким образом вставить оригинал? Вообще не могу понять, уже все варианты перепробовал :)
|resize:300:500 убери. Этот вариант не пробовал? )
 
|resize:300:500 убери. Этот вариант не пробовал? )
Сразу ошибка:
Fatal error: Uncaught --> Smarty Compiler: Syntax error in template "C:\OpenServer\domains\sim77cms8\design\default_1\html\product.tpl" on line 26 "<a href="{$product->image->filename}" class="zoom" rel="group"><img src="{$product->image->filename" alt="{$product->product->name|escape}" /></a>" - Unexpected """, expected one of: "}" <-- thrown in C:\OpenServer\domains\sim77cms8\Smarty\libs\sysplugins\smarty_internal_templatecompilerbase.php on line 26
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху