src/WebBundle/Resources/views/Catalog/search-result.html.twig line 1

Open in your IDE?
  1. {% include '@Web/Catalog/script-tag.html.twig' with { 'result': result } %}
  2. {% import '@Web/Collection/collection_macros.html.twig' as setParameter %}
  3. <div class="divDataFs"
  4.      data-filtersearch="{{ dataFilterSearch }}"
  5.      data-filters="{{ activeFilters != null ? activeFilters | json_encode(constant('JSON_PRETTY_PRINT')) : '' }}"
  6. ></div>
  7. <div class="set-z-index-boxify"></div>
  8. {% for k, elem in result.list %}
  9.     {% set article = (elem.interiors | length < 1 and (elem.a_show == 1 or elem.interiors | length == 0)) ? true : false %}
  10.     {% set numOfImgWithoutLazy = is_mobile() ? 5 : 12 %}
  11.     {# Найти интерьер с минимальной шириной, учитывая наличие атрибута 'x' #}
  12.     {% set interiorWithMinSize = null %}
  13.     {% for interior in elem.interiors %}
  14.         {% if interior.x is defined %}
  15.             {% if interiorWithMinSize is null or interior.x | number_format < interiorWithMinSize.x | number_format %}
  16.                 {% set interiorWithMinSize = interior %}
  17.             {% endif %}
  18.         {% endif %}
  19.     {% endfor %}
  20.     {% set isNotFactoryPage = 'factory' not in dataFilterSearch %}
  21.     {% if elem.c_name != null %}
  22.         {% set price = elem.measureId == 1 and elem.price_mq > 0 ? elem.price_mq : elem.price %}
  23.         {% set price = userCurrency() == 'GBP' ? elem.price | floatSing : elem.price | floatSing(0) %}
  24.         <div class="boxInformer js-catalog-box-informer"
  25.             data-id={{ elem.c_id }}
  26.             {% if isNotFactoryPage %}
  27.                 itemscope itemtype="https://schema.org/Product"
  28.             {% endif %}
  29.         >
  30.             {% set exhibitions = false %}
  31.             {% if not isPageExhibition and elem.c_exhibition | length > 0 %}
  32.                 {% set exhibitions = elem.c_exhibition %}
  33.             {% endif %}
  34.             {# выезжающий информер #}
  35.             <div class="collection-informer">
  36.                 <div class="innerBoxInformer">
  37.                     <div class="header-wrapper">
  38.                         <div class="header">
  39.                             {% if isNotFactoryPage %}
  40.                                 <span itemprop="name" class="textCollection">{{ elem.c_name | transform }}</span>
  41.                             {% endif %}
  42.                             <span class="textCollection">{{ elem.c_name | transform }}</span>
  43.                             {% if elem.author != null %}
  44.                                 <span class="design-name" data-name="{{ elem.author | trim }}">
  45.                                 ({{ 'catalog_desigin' | trans ({'%author%' : elem.author | trim }) }})
  46.                                 </span>
  47.                             {% endif %}
  48.                             <span 
  49.                                 {% if isNotFactoryPage %} 
  50.                                     itemprop="brand" itemscope itemtype="https://schema.org/Brand"
  51.                                 {% endif %}
  52.                             >
  53.                                 {% if isNotFactoryPage %}
  54.                                     <meta itemprop="name" content="{{ elem.f_name | transform }}"/>    
  55.                                 {% endif %}                           
  56.                                 {{ 'collection_by' | trans }} {{ elem.f_name | transform }}
  57.                             </span>
  58.                             <span class="flag flag-{{ elem.country_code | lower }}"></span>
  59.                         </div>
  60.                     </div>
  61.                     {% if isNotFactoryPage %}
  62.                         <meta itemprop="sku" content="{{ elem.c_code }}"/>
  63.                         <meta itemprop="description" content="{{ meta.description | raw }}"/>
  64.                         <meta itemprop="mpn" content="{{ elem.c_id }}"/>
  65.                         {% if elem.prc_count > 0 %}
  66.                             <span itemprop="review" itemscope itemtype="http://schema.org/Review">
  67.                                 <span itemprop="author" itemscope itemtype="http://schema.org/Person">
  68.                                     <meta itemprop="name" content="author"/>
  69.                                 </span>
  70.                                 <span itemprop="reviewRating" itemtype="http://schema.org/Rating" itemscope>
  71.                                     <meta itemprop="ratingValue" content="{{ elem.prc_vote / elem.prc_count }}"/>
  72.                                     <meta itemprop="bestRating" content="5"/>
  73.                                     <meta itemprop="worstRating" content="1"/>
  74.                                 </span>
  75.                             </span>
  76.                         {% endif %}
  77.                     {% endif %}
  78.                     {% if elem.type == 1 %}
  79.                         <br/>
  80.                         <div>
  81.                             <b>{{ 'catalog_price_from' | trans }}
  82.                                 <strong>{{ price > 0 ? price : '-' }}</strong>
  83.                                 {{ '' | currency | raw }}/{{ elem.measureText | trans }}
  84.                             </b>
  85.                         </div>
  86.                     {% endif %}
  87.                     <div class="settings" data-processed="0"
  88.                          data-action="{{ path('app_collection_settings', { 'coll': elem.c_id }) }}">
  89.                     </div>
  90.                     {% if elem.prc_count > 0 %}
  91.                         <div class="collections-rating no-float">
  92.                             {% set reviewsRate = elem.prc_vote / elem.prc_count %}
  93.                             {{ include ('@Web/Common/rating_stars.html.twig', {'rating': reviewsRate, 'classname': '' }) }}
  94.                             <br/>
  95.                             <a href={{ "#{elem.url}#description_reviews" }}>
  96.                                 <div class="count-reviews clearfix">
  97.                                     {{ ('product_review_header') | trans }}
  98.                                     <span>({{ elem.prc_count }})</span>
  99.                                 </div>
  100.                             </a>
  101.                         </div>
  102.                     {% endif %}
  103.                 </div>
  104.             </div>
  105.             {% set lastElCount = elem.interiors | length %}
  106.             {% set hiddenDots = lastElCount <= 1 %}
  107.             <div class="butPointBlueBox {{ hiddenDots ? ' dots--hidden' : '' }}">
  108.                 {% for index, interior in elem.interiors %}
  109.                     <div data-code="{{ interior.i_id }}"
  110.                          class="butPointBlue{{ index == 0 ? ' butPointBlueSel' : '' }}"
  111.                          data-slide-nav={{ loop.index }}></div>
  112.                 {% endfor %}
  113.                 {% if article %}
  114.                     {% for index, article in elem.articles %}
  115.                         {% if index < 3 - elem.interiors | length %}
  116.                             <div data-action=""
  117.                                  class="butPointBlue {{ index == 0 and elem.interiors | length == 0 ? ' butPointBlueSel' : '' }}">
  118.                             </div>
  119.                             {% set lastElCount = index + 1 %}
  120.                         {% endif %}
  121.                     {% endfor %}
  122.                 {% endif %}
  123.             </div>
  124.             <div class="arrow left" data-prev-interior="{{ lastElCount }}"></div>
  125.             <div class="arrow right" data-next-interior="2"></div>
  126.             <a href="{{ elem.url }}"
  127.                target="_blank"
  128.                rel="noopener"
  129.                class="bodyImg js-collection-page-link {% if article %}article_bodyImg{% endif %}"
  130.                data-id-coll="{{ elem.c_id }}"
  131.                data-link="{{ elem.url }}"
  132.                data-page="{{ page }}"
  133.                {% if isNotFactoryPage %}
  134.                    itemprop="url"
  135.                {% endif %}
  136.             >
  137.                 {% for index, interior in elem.interiors %}
  138.                     {% set path = setParameter.setCatalogInteriorNameFile(elem, interior) %}
  139.                     {% set trimmedPath = path | trim %}
  140.                     {# {% set pathWithModifiedPostfix = trimmedPath | replace({'/z_': '/a_'}) %} #}
  141.                     {% set id = interior.i_id %}
  142.                     <div>
  143.                         <img content="{{ trimmedPath }}"
  144.                             {% if isNotFactoryPage %}
  145.                                 itemprop="image"
  146.                             {% endif %}
  147.                             {% if k > numOfImgWithoutLazy or index > 0 %}
  148.                                 loading="lazy"
  149.                             {% endif %}
  150.                             data-alt="{{ interior.alt }}"
  151.                             data-first="interior{{ interior.i_id }}"
  152.                             {% if index == 0 and interiorWithMinSize is not null %}
  153.                                 data-width="{{ interiorWithMinSize.x == "0" ? 200 : interiorWithMinSize.x }}"
  154.                                 data-height="{{ interiorWithMinSize.x == "0" ? 300 : interiorWithMinSize.y }}"
  155.                             {% elseif interior.x == 0 or interior.x > 600 %}
  156.                                 data-width="400"
  157.                                 data-height="400"
  158.                             {% else %}
  159.                                 data-width="{{ interior.x | round }}"
  160.                                 data-height="{{ interior.y | round }}"
  161.                             {% endif %}
  162.                             data-slide="{{ loop.index }}"
  163.                             data-process="{{ elem.process }}"
  164.                             alt="{{ interior.alt }}"
  165.                             data-observe-img
  166.                             {% if index == 0 %}
  167.                                 class="oneImg"
  168.                             {% else %}
  169.                                 class="image"
  170.                                 data-link="{{ trimmedPath }}"
  171.                             {% endif %}
  172.                             src="{{ trimmedPath }}"
  173.                         />
  174.                     </div>
  175.                 {% endfor %}
  176.                 {% if article %}
  177.                     {% for index, article in elem.articles %}
  178.                         {% if index < 3 - elem.interiors | length %}
  179.                             {% set path = setParameter.setCatalogArticleNameFile(elem, article) %}
  180.                             {% set trimmedPath = path | trim %}
  181.                             {% set pathWithModifiedPostfix = trimmedPath | replace({'/b_': '/a_'}) %}
  182.                             <div class="img_container_interiors">
  183.                                 <img content="{{ pathWithModifiedPostfix }}"
  184.                                     {% if k > numOfImgWithoutLazy or index > 0 %}
  185.                                         loading="lazy"
  186.                                     {% endif %}
  187.                                     {% if isNotFactoryPage %}
  188.                                         itemprop="image"
  189.                                     {% endif %}
  190.                                      alt="{{ article.alt }}"
  191.                                      data-first="article{{ article.a_id }}"
  192.                                     {% if article.a_x == 0 or article.a_x > 600 %}
  193.                                         data-width="400"
  194.                                         data-height="400"
  195.                                     {% else %}
  196.                                         data-width="{{ article.a_x | round }}"
  197.                                         data-height="{{ article.a_y | round }}"
  198.                                     {% endif %}
  199.                                      data-process="{{ elem.process }}"
  200.                                     {% if index == 0 and elem.interiors | length == 0 %}
  201.                                         {# "art" используется в js плагине сетки #}
  202.                                         {# "art--highlights_img" - контур для светлых изобр. #}
  203.                                         class="oneImg img art {{ article.b_g == "1" ? ' art--highlights_img' : '' }}"
  204.                                     {% else %}
  205.                                         data-link="{{ asset(path) }}"
  206.                                     {% endif %}
  207.                                     src="{{ pathWithModifiedPostfix }}"
  208.                                 />
  209.                             </div>
  210.                         {% endif %}
  211.                     {% endfor %}
  212.                 {% endif %}
  213.             </a>
  214.             <div class="top">
  215. {#                {% if elem.arrow %}#}
  216. {#                    <span>+{{ te.valK(elem.ratingMonth)}}</span>#}
  217. {#                    #}{# Стрелка вверх - класс "arrow-up", стрелка вниз - класс "arrow-down" #}
  218. {#                    <div class="arrow-{{ elem.arrow }}"></div>#}
  219. {#                {% endif %}#}
  220.                 <div
  221.                     class="price-info interior-info-top{{ exhibitions ? ' exhibition-block' : '' }} {{ elem.discontinued ? ' discontinued' : '' }} {% if article %}article_info_top{% endif %}">
  222.                     {% if isNotFactoryPage %}
  223.                         <meta itemprop="material" content="{{ elem.material | join(', ') }}" />
  224.                     {% endif %}
  225.                     <span class="fon"
  226.                         {% if isNotFactoryPage %}
  227.                             itemprop="offers" 
  228.                             itemscope 
  229.                             itemtype="https://schema.org/Offer"
  230.                         {% endif %}
  231.                     >
  232.                         {% if (userSession.lang is defined) and (userSession.lang == 'ru' or userSession.lang == 'no' or userSession.lang == 'dk') %}
  233.                             {{ 'catalog_price_from' | trans }}
  234.                         {% endif %}
  235.                         <strong>
  236.                             {% if elem.price > 0 %}
  237.                                 {{- elem.price -}}{% if userSession.lang is not defined or (userSession.lang != 'ru' and userSession.lang != 'no' and userSession.lang != 'dk') %}+{% endif %}
  238.                             {% else %}
  239.                                 -
  240.                             {% endif %}
  241.                         </strong>
  242.                         {% if isNotFactoryPage %}
  243.                             <meta itemprop="price" content="{{ elem.price }}"/>
  244.                             <meta itemprop="priceCurrency" content="{{ userCurrency() }}"/>
  245.                             <meta itemprop="itemCondition" content="http://schema.org/NewCondition"/>
  246.                             <meta itemprop="availability" content="http://schema.org/InStock"/>
  247.                             <meta itemprop="url" content="{{ elem.url }}"/>
  248.                             <meta itemprop="priceValidUntil" content="{{ date() | date_modify('+7 day') | date('Y-m-d') }}"/>
  249.                             <span itemprop="seller" itemtype="http://schema.org/Organization" itemscope>
  250.                                 <meta itemprop="name" content="{{ siteName }}"/>
  251.                             </span>
  252.                         {% endif %}
  253.                         <span class="price-info-currency">{{ '' | currency | raw }}/{{ elem.measureText }}</span>
  254.                     </span>
  255.                 </div>
  256.                 <!-- элем {{ elem.prc_count }} -->
  257.                 <div class="reviews-info">
  258.                     {% if elem.prc_count > 0 %}
  259.                         {# Почему 2 блока со звездами? #}
  260.                         <div 
  261.                             class="reviews-block" 
  262.                             style="display:none"
  263.                             {% if isNotFactoryPage %}
  264.                                 itemprop="aggregateRating" 
  265.                                 itemscope 
  266.                                 itemtype="https://schema.org/AggregateRating"
  267.                             {% endif %}
  268.                         >
  269.                             {% if isNotFactoryPage %}
  270.                                 <meta itemprop="ratingValue" content="{{ elem.prc_vote / elem.prc_count }}"/>
  271.                                 <meta itemprop="bestRating" content="5"/>
  272.                                 <meta itemprop="ratingCount" content="{{ elem.prc_count }}"/>
  273.                             {% endif %}
  274.                             {% set reviewsRate = elem.prc_vote / elem.prc_count %}
  275.                             {% set reviewsRatePercent = (reviewsRate * 100) / 5 %}
  276.                             {% set widthActive = 50 %}
  277.                             {% if reviewsRatePercent > 50 and reviewsRatePercent != 100 %}
  278.                                 {% set widthActive = 60 %}
  279.                             {% elseif reviewsRatePercent < 50 %}
  280.                                 {% set widthActive = 40 %}
  281.                             {% elseif reviewsRatePercent == 100 %}
  282.                                 {% set widthActive = 100 %}
  283.                             {% endif %}
  284.                             {{ include ('@Web/Common/rating_stars.html.twig', {'rating': reviewsRate, 'classname': '' }) }}
  285.                             <span class="count-reviews">
  286.                                     <b><a href="{{ elem.url }}#description_reviews">({{ elem.prc_count }})</a></b>
  287.                                 </span>
  288.                         </div>
  289.                         <div class="reviews-block all-stars js-all-stars ">
  290.                             {% set reviewsRate = elem.prc_vote / elem.prc_count %}
  291.                             {% set reviewsRatePercent = (reviewsRate * 100) / 5 %}
  292.                             {{ include ('@Web/Common/rating_stars.html.twig', {'rating': reviewsRate, 'classname': '' }) }}
  293.                             <span class="count-reviews ">
  294.                                 <b><a class="{% if article %}article_count_reviews{% endif %}"
  295.                                       href="{{ elem.url }}#description_reviews">({{ elem.prc_count }})</a></b>
  296.                             </span>
  297.                         </div>
  298.                     {% endif %}
  299.                 </div>
  300.                 <div class="interior-info-top aditional-info">
  301.                     {# вывод года релиза коллеции ярлычком, если это текущий год #}
  302.                     {% if elem.c_release_year == ('now' | date('Y')) %}
  303.                         <div class="status">{{ 'collection.releaseYear'|trans({'%d%': elem.c_release_year }) }}</div>
  304.                     {% endif %}
  305.                     {% if elem.discontinued %}
  306.                         <span class="coll-closed js-fon">{{ 'collection_unavailable_freezed_desc' | trans }}</span>
  307.                     {% endif %}
  308.                     {% if elem.c_status == 3 %}
  309.                         <div class="status">{{ 'article.temp_unavailable' | trans }}</div>
  310.                     {% endif %}
  311.                     {% if elem.awards and elem.awards | length > 0 %}
  312.                         <span class="awards-list js-awards">
  313.                             <img
  314.                                 loading="lazy"
  315.                                 class="help-tooltip-right"
  316.                                 src="{{ asset('img/award.svg') }}"
  317.                                 title="
  318.                                     {% for award in elem.awards %}
  319.                                         {{ award.title }} <br />
  320.                                     {% endfor %}
  321.                                 "
  322.                                 alt="
  323.                                     {% for award in elem.awards %}
  324.                                         {{ award.title }},
  325.                                     {% endfor %}
  326.                                 "
  327.                             />
  328.                         </span>
  329.                     {% endif %}
  330.                 </div>
  331.             </div>
  332.             <div class="collScriptBg">
  333.                 <div
  334.                      class="collScript {% if article %}article_collScript{% endif %}"
  335.                 >
  336.                     <span class="col_name">{{ elem.material | join(', ') | transform }}</span>
  337.                 </div>
  338.                 <div class="coll-params">
  339.                     <div class="coll-params-main">
  340.                         {# иконка экспресс образца #}
  341.                         {% if elem.hasExpressSample %}
  342.                             <div class="has-sample help-tooltip" title="{{ 'collection.sample_tooltip' | trans }}">
  343.                                 {% if is_mobile() %}
  344.                                     {% include (article) ? '@Web/SVGIconsCode/quik_sample_catalog_mobile_art.html.twig' : '@Web/SVGIconsCode/quik_sample_catalog_mobile.html.twig' %}
  345.                                 {% else %}
  346.                                     {% include (article) ? '@Web/SVGIconsCode/quick_sample_catalog_art.html.twig' : '@Web/SVGIconsCode/quick_sample_catalog.html.twig' %}
  347.                                 {% endif %}
  348.                             </div>
  349.                         {% endif %}
  350.                         {% if elem.interiors | length > 0 %}
  351.                             {# определить, какую подсказку показать при наведении (для добавленного или не добавленного интерьера в идеи) #}
  352.                             {% set isAddedInIdeabook = false %}
  353.                             <div
  354.                                 data-idea-btn-id="add-to-idea-button"
  355.                                 data-code="{{ elem.interiors[0].i_id }}"
  356.                                 data-b_link="{{ path('app_ideas_list', {id: null }) }}/"
  357.                                 data-action="{{ path('app_ideas_list', {id: elem.interiors[0].i_id }) }}"
  358.                                 class="idea-add idea-interior
  359.                                         {% for interior in elem.interiors %}
  360.                                             {% if result.favorites[interior.i_id] is defined %}
  361.                                                 active
  362.                                                 {% set isAddedInIdeabook = true %}
  363.                                             {% endif %}
  364.                                             idea-add-{{ interior.i_id }} i_{{ interior.i_id }}
  365.                                         {% endfor %}"
  366.                                 title="{% set ideasCount = elem.rating | default(0) %}"
  367.                                 role="add-to-project"
  368.                                 data-type-project="idea"
  369.                                 data-element-count="1"
  370.                                 data-msg-added="{{ 'idea_msg_added' | trans }}"
  371.                                 data-from-collection={{ elem.c_id }} {# для gtm #}
  372.                                 {# поиск поля в объекте с началом "price_sort" #}
  373.                                 {% for key, value in elem %}
  374.                                     {% if key[:10] == 'price_sort' %}
  375.                                 data-min-price={{ value }}
  376.                                 {% endif %}
  377.                                 {% endfor %}
  378.                             >
  379.                                 {% if is_mobile() %}
  380.                                     <i class="idea-added-to-project rating help-tooltip-fast-hide"
  381.                                         title="{{ 'collection_ideas_short' | trans | raw | capitalize }}">
  382.                                             {% include (article) ? '@Web/SVGIconsCode/idea_added_mobile_art.html.twig' : '@Web/SVGIconsCode/idea_added_mobile.html.twig' %}
  383.                                     </i>
  384.                                     <i class="idea-not-added-to-project rating {% if not is_mobile() %}help-tooltip-fast-hide{% endif %}"
  385.                                         title="{{ 'collection_ideas_short' | trans | raw | capitalize }}">
  386.                                             {% include (article) ? '@Web/SVGIconsCode/idea_no_added_mobile_art.html.twig' : '@Web/SVGIconsCode/idea_no_added_mobile.html.twig' %}
  387.                                     </i>
  388.                                 {% else %}
  389.                                     <i class="idea-added-to-project rating help-tooltip-fast-hide"
  390.                                         title="{{ 'collection_ideas_short' | trans({'%number%': te.valK(ideasCount)}) | raw | capitalize }}">
  391.                                             {% include (article) ? '@Web/SVGIconsCode/idea_added_art.html.twig' : '@Web/SVGIconsCode/idea_added.html.twig' %}
  392.                                     </i>
  393.                                     <i class="idea-not-added-to-project rating {% if not is_mobile() %}help-tooltip-fast-hide{% endif %}"
  394.                                         title="{{ 'collection_ideas_short' | trans({'%number%': te.valK(ideasCount)}) | raw | capitalize }}">
  395.                                             {% include (article) ? '@Web/SVGIconsCode/idea_no_added_art.html.twig' : '@Web/SVGIconsCode/idea_no_added.html.twig' %}
  396.                                     </i>
  397.                                 {% endif %}
  398.                                 <span class="val">{{ te.valK(ideasCount) }}</span>
  399.                             </div>
  400.                         {% endif %}
  401.                     </div>
  402.                 </div>
  403.             </div>
  404.         </div>
  405.     {% endif %}
  406. {% endfor %}