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

question

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

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

  • Посещение

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

  1. 1. добавляем в таблицу s_products (или куда надо если это не для товаров)

    ALTER TABLE `s_products` ADD `gallery` VARCHAR( 255 ) NULL AFTER `visible`
    

    2. добавляем выбор поля (p.gallery) в функции get_products(строка 109 примерно) и get_product(230 строка) из api/products.php

    		$query = "SELECT  
    					p.id,
    					p.url,
    					p.brand_id,
    					p.name,
    					p.annotation,
    					p.body,
    					p.position,
    					p.created as created,
    					p.visible,
    					p.gallery,
    

    3. выводим в админке поле (/simpla/design/html/product.tpl), куда будет вводиться путь к папке с галереей:

     	<!-- Левая колонка свойств товара -->
    	<div id="column_left">
    			
    		<!-- Параметры страницы -->
            <div class="block">
                <ul>
    <li><label class=property>Путь к папке с фото</label><input name="gallery" class="simpla_inp" type="text" value="{$product->gallery|escape}" /></li>
    ....
    

    4. в обработчике  /simpla/ProductAdmin.php добавляем где-то в строках 32-35

    $product->gallery = $this->request->post('gallery');
    

    5. дальше в view/ProductView.php можно в конец добавляем:

    //получаем полный путь к папке на сервере
    $image_folder_path = $_SERVER['DOCUMENT_ROOT']."".$product->gallery;
    //находим все изображения jpg, png
    $gallery_mass = glob($image_folder_path . "*.[jJpP][pPn][gG]");
    //находим текстовый файл подписей для фоток (каждое название с новой строки)
    $title_mass = file($image_folder_path.'titles.txt');
    //записываем все пути к фоткам галереи без абсолютного пути
    foreach($gallery_mass as $mass) {
       $gallery_new[] = str_replace($_SERVER['DOCUMENT_ROOT'], "", $mass);
    }
    
    // передаем галерею и подписи в шаблон
    $this->design->assign('image_mass', $gallery_new);
    $this->design->assign('title_mass', $title_mass);
    

    6. Выводим в шаблон design/theme/html/product.tpl куда нужно

                                    {foreach $image_mass as $images name=imgss}
    					<a rel="group" class="zoom" href="{$images|escape}" title="{$title_mass[$smarty.foreach.imgss.index]}">
    						<img src="{$images|escape}"/>
    					</a>      
                                    {/foreach} 

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

    Ваше решение - говно.

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

  2. А подскажите как реализовали такое? Тоже нужно разделить шаблоны но группы товаров и категории оставить общими.. 

     

    У меня так сделано уже давно, года три как. Алгоритм примерно такой:

    1. Симпла - нулл (даже если у вас есть лицензия).

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

    3. В файле... не помню каком, правда, давно это было... что-то вроде template.php назначить переменной, отвечающей за название шаблона (она называется как-то типа $config->theme или просто $theme) значение не из базы, а из адреса url, введённого в браузере (переменная $_SERVER в php)

    Всё. Теперь у вас 2 сайта с одинаковым контентом и разными шаблонами, а значит и физическими адресами, номерами телефонов и т.д.

    Но я пошёл дальше, назначив для каждого сайта свои заголовки, свои названия разделов, свои описания, свои meta description и так далее. Даже цены какое-то время были разными (на одном из сайтов на 10% выше). 

  3. Я так меняю

     

     

    UPDATE n_variants, n_products, n_categories, n_products_categories SET n_variants.compare_price = round (n_variants.price * 0.85 ,2) WHERE n_variants.product_id = n_products.id AND n_products.id = n_products_categories.product_id AND n_products_categories.category_id IN (84, 112, 180, 195, 206, 279, 1796, 1797, 1798, 1799, 1800);
    
     

     

  4. Я так меняю

    UPDATE n_variants, n_products, n_categories, n_products_categories SET n_variants.compare_price = round (n_variants.price * 0.85 ,2) WHERE n_variants.product_id = n_products.id AND n_products.id = n_products_categories.product_id AND n_products_categories.category_id IN (84, 112, 180, 195, 206, 279, 1796, 1797, 1798, 1799, 1800);
    

     

  5. {get_new_products var=new_products limit=10 brand_id=$b->id category_id=$category->id}

     

    но все равно. такой вывод через шаблон не идеальный.

    это просто пример, который можно использовать. вместо готового get_new_products - другое .

    Попробовал, работает на ура.

     

    {foreach $category->brands as $b}
        <h2>{$b->name}</h2>
        {get_new_products var=new_products category_id=$category->id brand_id=$b->id}
        {if $new_products}
            {foreach $new_products as $p}
                {$p->name}<br/>
            {/foreach}
        {/if}
    {/foreach}
     

    Генерация страницы занимает от 60 до 90 мсек. Это не похоже на толкание танка. Одна проблема: бренды расположены по алфавиту, а не по их id. Понимаю, что в sql запросе стоит 

     

    order by b.name
     

     

    , который нужно исправить на 

     

    order by b.id
     

     

    , но в каком файле искать этот запрос?

  6. Странно, но вариант ST_RU (упростил до такого)

     

    {foreach $category->brands as $b}
        <h2>{$b->name}</h2>
        {get_new_products var=new_products brand_id=$b->id}
        {if $new_products}
            {foreach $new_products as $p}
                {$p->name}<br/>
            {/foreach}
        {/if}
    {/foreach}
     

     

    Выводит товары нужных брендов, но абсолютно всех категорий. Подскажите, как в get_new_products добавить id категории.

  7. Попробовал свой вариант

     

    {foreach $category->brands as $b}
        <h2>{$b->name}</h2>
        {foreach $products as $p}
            {if $p->brand == $b}
                {$p->name}<br/>
            {/if}
        {/foreach}
    {/foreach}
     

    Не работает. Думаю, причина в том, что у товара нет свойства "бренд" (нет в селекте соответствующего запроса).

  8. Я уже поднимал тему о кешировании. Сделать его очень просто, в моём случае на диске сохраняется вывод всех товаров со всеми сортировками и прочими параметрами, которые когда-либо запрашивал пользователь, в итоге нагрузка на БД равна 0.1% от лимита самого дешёвого хостинга при запросе 1000 страниц в сутки. Корзина, комментарии и прочие динамические страницы - отдельный разговор. И да, кеш живёт до изменения цен или описания (удаляю руками).

  9. Ребята, я и не просил готовое решение. Просто чтобы направили в нужное русло.

    Сейчас буду проверять свою и вашу версию, посмотрю, сильно ли вырастет нагрузка. А вообще у меня такое пофигистическое отношение к задаче потому что на сайте реализовано кеширование и даже если время генерации страницы составит немыслимых 1 секунду, то второй и последующие разы эта страница будет выводиться из кеша, понадобится около 5-7 мсек на ssd-хостинге.

    Спасибо.

  10. Мне бы для начала решение без оптимизации, чисто на уровне шаблона. 

    что-то типа

     

    {foreach $products as $product}
    {foreach $brands as $brand}
    {if...
    {/foreach}{/foreach}
     

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

     
  11. Кто сталкивался, как делали?

    Есть необходимость вывода, например, телефонов в таком виде

    Телефоны

    Samsung

    1,2,3,4,5

    Apple

    1,2,3,4

    Huawei

    1,2,3,4

     

    Сделать вложенный цикл... но как быть, если, например, на сайте присутствует бренд Zelmer без телефонов? Вообще не понимаю, с какой стороны к этой задаче подойти.

  12. simpla/ProductsAdmin.php Заменить это

            // Текущий бренд
            $brand_id = $this->request->get('brand_id', 'integer'); 
            if($brand_id && $brand = $this->brands->get_brand($brand_id))
                $filter['brand_id'] = $brand->id;
    

    на это

     

            // Текущий бренд        
    
            $brand_id = $this->request->get('brand_id', 'integer'); 
            if($brand_id)
            {
                $filter['brand_id'] = $brand_id;
                $brand = $this->brands->get_brand($brand_id);
            }
     

     

     

    Далее в api/Products.php в двух функциях (get_products и count_products) заменить это

     

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

     

    на это
     

     

    if(!empty($filter['brand_id']))
    {
        if ($filter['brand_id'] < 999999)
        {
            $brand_id_filter = $this->db->placehold('AND p.brand_id in(?@)', (array)$filter['brand_id']);
        }
        else
        {
                    $brand_id_filter = 'AND p.brand_id IS NULL OR p.brand_id = 0';
        }
    }
     

     

    теперь по адресу site.ru/index.php?module=ProductsAdmin&brand_id=999999 будут выводиться товары без принадлежности к бренду.

    Ремарка. Если у вас 999999 брендов, то работать не будет.

  13. Здравствуйте. Можно ли выбрать в админке товары, у которых нет принадлежности ни к одному бренду?

     

     

    Пока вижу такой выход: создать бренд "без бренда" и сделать sql-запрос, устанавливающий каждому товару, у которого в поле brand стоит null id этого бренда. Костыль.

  14. Мне вот вообще ничего не понятно...

    Что именно вы хотите? Если вывести количество товаров на странице Категории, Бренда или Все товары - то это несложно.

    А если на какой-то другой - то вообще непонятно, каких именно товаров?

    Можете по-человечески описать задачу?

    Задача непростая и двумя предложениями её не опишешь. Но если кратко, то я делал кеширование некоторых страниц/категорий/товаров в Симпле. Делал это с целью ускорения генерации страниц (иногда по 400 мсек требовалось, сейчас - 5-8).

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

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