Популярное
9 заметок с тегом

Битрикс

18 апреля  

Вывести теги в фильтр Битрикс bintrix.news

Задача:

Если вам тоже необходимы любые доработки по Битриксу, то вы можете обратиться к нам за помощью. Пишите на почту info@artapir.ru

Вывести фильтр по тегам для компонента bitrix.news. из дополнительного свойства с типом «Строка». Проблема заключается в том, что по умолчанию в компоненте catalog.filter который по умолчанию подключается в компонент новостей, выводиться строка поиска по тегам.

Необходимо было сделать что бы она выводилась выпадающим списком. Списком можно вывести свойство, которое имеет свойство «Список». Но менять свойства,не было возможности.

Решение:
Для начало, нам необходимо составить массив всех наших значений. Для этого, в шаблоне компонента /bitrix/catalog.filter/.default/template.php вставляем код перед формой:

<?
//start generation arr for options
foreach($arResult["arrProp"] as $value)
{
   $arSelect[] = "PROPERTY_".$value["CODE"];
}
$res = CIBlockElement::GetList(Array(), Array("IBLOCK_ID"=>IntVal($arParams["IBLOCK_ID"])), false, Array("nPageSize"=>false), $arSelect);
while($ob = $res->GetNext())
{
   foreach($arResult["arrProp"] as $value)
   {
      $arSelOpt[$value["CODE"]][] = $ob["PROPERTY_".$value["CODE"]."_VALUE"];
   }
}
foreach($arResult["arrProp"] as $value)
{
   $arSelOpt[$value["CODE"]] = array_unique($arSelOpt[$value["CODE"]]);
}
//end generation arr for options
?>

А теперь правим форму:

<form name="<?echo $arResult["FILTER_NAME"]."_form"?>" action="<?echo $arResult["FORM_ACTION"]?>" method="get">
   <fieldset>
      <?foreach($arResult["ITEMS"] as $arItem):
         if(array_key_exists("HIDDEN", $arItem)):
            echo $arItem["INPUT"];
         endif;
      endforeach;?>
      <?foreach($arResult["ITEMS"] as $arItem):?>
         <?if(!array_key_exists("HIDDEN", $arItem)):?>
            <?
            foreach($arResult["arrProp"] as $val)
            {
               if($val["NAME"] == $arItem["NAME"])
               {
                  echo '<div class="name_filtr">'."{$arItem["NAME"]} ".'</div>';
                  echo '<select style="width:150px;" onChange="'.$arResult["FILTER_NAME"]."_form".'" name="arrFilter_pf['.$val["CODE"].']">';
                
                  foreach($arSelOpt[$val["CODE"]] as $value)
                  {
                     echo '<option type="submit" name="set_filter" value="'."{$value}".'">'."{$value}".'</option>';
                  }
                  echo '</select>';
               }
            }
            ?>
         <?endif?>
      <?endforeach;?>
      <input  class="submit" type="submit" name="set_filter" value="Показать" />
   </fieldset>
</form>

В итоге, мы получаем красивый список свойств, по которому можно отфильтровать элементы новостей

Поблагодарить автора

Битрикс   наши услуги

17 апреля  

Выводить похожие статье Битрикс

Если вам тоже необходимы любые доработки по Битриксу, то вы можете обратиться к нам за помощью. Пишите на почту info@artapir.ru

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

Решение:
Для вывода статей воспользуемся обычным news.list, а похожие статьи будем передавать фильтром в данный компонент.

текст кода, с комментариями по ходу:

// 1. Получаем данные по выбранному элементу: его название и поисковыве теги

$CurentElement=intval($_GET["ID"]); // берем ID текущей статьи из адресной строки

// 2. Получаем данные по выбранному элементу:

$res = CIBlockElement::GetByID($CurentElement);
if($ar_res = $res->GetNext())
    $arCurentElement=$ar_res;

// 3. Из названия и поисковых тегов формируем строку, по словам которой будем искать все похожие записи:

$tmpName=str_replace(
    array(".", ",","?","!","-"),
    "",
    trim($arCurentElement["NAME"]." ".$arCurentElement["TAGS"])
);

/*знаю, что кусок кода выше можно было сделать проще через регулярные выражения. Но, к сожалению, я с ними не дружу:( */

if(strlen($tmpName)>0){
    $arLooksLike = array(
     "INCLUDE_SUBSECTIONS" => "Y",
     "!ID"=>intval($CurentElement)  /*исключаем данный элемент из выборки*/
    );
    $NameItems=explode(" ",$tmpName);  

    /* кто умеет пользоваться регулярными выражениями - можете предварительно не очищать от знаков пунктуации, 
      а сразу тут выбирать уже массив готовых результатов */

    $itemsArray=array();
    foreach($NameItems as $item){
     if(strlen($item)>1){
      $itemsArray[]=array("NAME" => "%".$item."%");  // ищем элементы, у которых выбранное свойство есть в названии
      $itemsArray[]=array("TAGS" => "%".$item."%");  // ищем элементы, у которых выбранное свойство есть в поисковых тегах
     }
    }
    $tmpArray=array("LOGIC" => "OR");  // подключаем логику "ИЛИ"

   следующие 2 операции, думаю, можно ужать, но не стал заморачиваться: и так работает.   

     $tmpArray=array_merge($tmpArray,$itemsArray); 

    $addFArray=array(
     array($tmpArray),
    );
    $GLOBALS["arLooksLike"]=array_merge($arLooksLike,$addFArray);  

}

В результате в глобальном массиве

$GLOBALS["arLooksLike"]

лежит подключаемый фильтр. Этот массив и подключаем к компоненту «news.list»:

"FILTER_NAME" => "arLooksLike",

Всем спасибо за внимание! жду критики...

Поблагодарить автора

Битрикс

16 апреля  

Как вывести Теги в списке новостей битрикса?

Необходимо вывести теги ссылкой на поиск по тегам с условиями для этого тега.
По умолчанию, битрикс выводит теги одной строкой в одном свойстве.

Нам необходимо разобрать это свойство и вывести так как нам надо.

Необходимые данные находятся
$arItem[«TAGS»]

В шаблон /bitrix/news.list/

Вставляем в нужное место код:

Копируй и вставляй!

<img src="/images/tegs.png" alt="">
	
	<?
$arrTags = explode(',', $arItem["TAGS"]);
$count = count($arrTags);
$i = 0;

foreach($arrTags as $value):
   $i++;
   $value = trim($value);
   echo '<a href="/search/?tags='.str_replace(' ', '+', $value).'">'.$value.'</a> ';      
   if($i != $count) echo ', ';
endforeach;
?>

И получаем

При клики на тег, мы переходим на поиск по тегам!
Отлично!

Для детальной странице,необходимо заменить arItem

Битрикс   Лайфхак

30 марта  

Установить optipng jpegoptim на Битрикс VDS

Задача
Нам необходимо было увеличить скорость загрузки сайта, путем оптимизации изображений.

К сожалению это часто такая проблема:
1) многие клиенты не знаю что такое «Оптимизация изображения» и вставляют картинки такие как есть.
2) Разработчик, забывают настроить хотя бы штатные Битриксовые обработки фото при выгрузке из 1С

Вот и один из таких клиентов,пришел к нам на поддержку:

Данного клиента, по необходимости,пришлось переносить на VDS и устанавливать Bitrix OS — что за необходимость мы напишем позже!

Решив воспользоваться модулем Оптимизация картинок — автоматически и без сторонних сервисов мы столкнулись с еще одной проблемой. Не установлены jpegoptim и optipng по умолчанию на сервере

Зайдя в консоль, мы прописываем вот такую строчку

yum install optipng jpegoptim

И происходит МАГИЯ :)

После завершения, мы видим два новых файла в директории /usr/bin «optipng» и «jpegoptim » соответственно.

После всех манипуляций, устанавливаем модуль и смотрим наши картинки. От увиденного, глаза наливаются кровью :)

Приступаем к оптимизации изображения:

Во время обработки изображения, решили посмотреть на нагрузку сервера и охренели, нагрузка доходила до 100%!

Ну что, о результатах мы расскажем не много позже, оставив долю интриги.

p.s. Кстати, в качестве хостинга и VDS для сайтов на битриксе, мы всегда используем и рекомендуем

Хостинг TimeWeb

Поблагодарить автора

VDS   Битрикс   Оптимизация   Хостинг

29 марта  

Выгрузка веса товара из 1С для торговых предложений

Задача: Выгрузить вес товаров из 1С для торговых предложений. По умолчанию, вес в 1С есть только у Номенклатуры.

Решение: На стороне 1С  для предложений добавляем новое свойство — Вес,гр. На сайте делаем новое свойство Вес,гр- VES_GR
И пишем и пишем обработчик который вставляем в init.php

Наверняка, кому то пригодиться эта информация:

Сам обработчик:

AddEventHandler("catalog", "OnCompleteCatalogImport1C", "upDateWiegth");
{
	function upDateWiegth() 
	{ 
		if (CModule::IncludeModule("catalog") && CModule::IncludeModule("iblock")) 
		{
			$arSelect = Array("ID", "IBLOCK_ID", "PROPERTY_VES_GR"); 	//получаем вес товара из свойства 
			
			//запрос всех товаро
			$db_res = CCatalogProduct::GetList(
				array("ID"=>"ASC"),
				array(),
				false, 
				false, 	//array('nTopCount' => 1000),
				array('ID','ELEMENT_IBLOCK_ID')
			); 
			while ($ar_res = $db_res->Fetch()) 
			{
				//запрос доп. информации по каждому товару, определяем вес
				$arFilter = Array(
					"ID"=>$ar_res["ID"],
					"IBLOCK_ID"=>$ar_res["ELEMENT_IBLOCK_ID"],
				); 
				
				$res = CIBlockElement::GetList(Array(), $arFilter, false, array('nTopCount' => 1), $arSelect); 
				if ($ob = $res->GetNextElement()) 
				{ 
					$arFields = $ob->GetFields(); 
					
					//если вес присутствует
					if ($arFields['PROPERTY_VES_GR_VALUE']) 
					{ 
						$wightResult = $arFields['PROPERTY_VES_GR_VALUE']*1000; 
						
						$ar_load = array(
							"WEIGHT" => $wightResult,
						);
						
						//изменяем вес - значение берется из свойства с кодом VES_GR
						if (CCatalogProduct::Update($ar_res["ID"], $ar_load) == true) 
						{ 
							echo "Вес товара ".$ar_res["ID"]." обновлен"; 
						} 
						else 
						{ 
							echo "Произошла ошибка при обновление веса товара"; 
						}
					}
				}

			}
		}
	}
}

После чего, мы делаем выгрузку и получаем вот какие значения:

Битрикс

23 марта  

Антивирус Битрикс блокирует Google

Что делать, если веб-антивирус 1С-Битрикса рапортует об обнаружении вируса

Работа веб-антивируса основана на эвристическом анализе потенциально опасных блоков в html коде. Количество ложных срабатываний веб-антивируса минимально, но, к сожалению, ложные срабатывания все равно встречаются.

С одним из таких ложных срабатываний столкнулись и мы, при установки кода аналитики от Google.

Установили мы обычный счетчик от Google и довольны. Но нет, происходит крик и саботаж на корабле антивируса. Вот что нам выдаёт журнал событий антивируса.

Ну допустим, смотрим код сайта

Нормально да? На наше действие, бездушная машина решила ответить нам не своими

<!-- deleted by bitrix Antivirus -->

Часто приходиться говорить с сайтом с использованием «французского лексикона» :)

Ок! Вызов принят сука!

Идем в в настройки веб-антивирус (/bitrix/admin/security_antivirus.php) на вкладку «Исключения» и в поле исключения вписываем фразу: «www.googletagmanager.com».

Fuck OFF антивирус Битрикса!

Битрикс

Ранее Ctrl + ↓