Strict Standards: Declaration of PluginAceadminpanel_ModuleLang::Get() should be compatible with ModuleLang::Get($sName, $aReplace = Array, $bDelete = true) in /home/deer/pages.org.ua/blog/plugins/aceadminpanel/classes/modules/lang/Lang.class.php on line 21 Strict Standards: Declaration of PluginAceadminpanel_ModuleViewer::_SortBlocks() should be compatible with ModuleViewer::_SortBlocks($a, $b) in /home/deer/pages.org.ua/blog/plugins/aceadminpanel/classes/modules/viewer/Viewer.class.php on line 24 Файлы с папки php interface / BPOU - Bitrix blog
Рейтинг
0.00
голосов: 0

О блоге

Всё, что касается папки /bitrix/php_interface/



По у молчанию в ней находятся файлы подключения к БД и init.php для выполнения каких-нибудь стартовых задач

Администраторы (1)

Модераторы (0)

Модераторов здесь не замечено

Читатели (0)

Читателей здесь не замечено

Почему слетает цена, которая изменена через handler OnBeforeBasketAdd

В битриксе, при обработке корзины, у каждого товара есть своя callback функция (по умолчанию это CatalogBasketCallback).
В фунции CatalogBasketCallback для определения цены, вызывается функция GetOptimalPrice, которая выбирает самую мелкую цену товара. Иногда это нужно, но иногда нет. Что же делать? Нужно прописать в функции OnBeforeBasketAdd:

$arFields["CALLBACK_FUNC"] = "";

Или вызов своей функции, например MyBasketCallback, которая будет проверять скидки, цены, количество товара. И наступит счастье!

Множественное добавление в корзину bitrix

В битриксе его нет, лол ок.

Можно сделать через массив айди и кодовую фразу с редиректом в корень.
Что бы не лезть в компоненту, запишем все в афтер_коннект.пхп
if (@$_GET["action"] == "ADD2BASKET" && is_array(@$_GET["id"])) {
	if (CModule::IncludeModule("catalog")){
		foreach ($_GET["id"] as $id)
			Add2BasketByProductID($id,1);
	}
	header ("Location: ?");die();
}


По желанию в Add2BasketByProductID можно передать кастомные параметры

Подсветки PHP в редакторе

Для реализации подсветки php-синтаксиса в редакторе, вставляем в /bitrix/php_interface/init.php следующее:

<?
# code writen by Евгений Петриченко http://me.lt/327sA
if ($_SERVER['SCRIPT_NAME']=="/bitrix/admin/fileman_file_edit.php")
{
   AddEventHandler("main", "OnEpilog", "InitPHPHighlight");
   function InitPHPHighlight()
   {
      global $APPLICATION;
            $string='<link rel="stylesheet" href="http://codemirror.net/lib/codemirror.css">
      <script src="http://codemirror.net/lib/codemirror.js"></script>
      <script src="http://codemirror.net/mode/xml/xml.js"></script>
      <link rel="stylesheet" href="http://codemirror.net/mode/javascript/javascript.css">
      <link rel="stylesheet" href="http://codemirror.net/mode/clike/clike.css">
      <script src="http://codemirror.net/mode/javascript/javascript.js"></script>
      <script src="http://codemirror.net/mode/php/php.js"></script>
      <script src="http://codemirror.net/mode/clike/clike.js"></script>
      <style>

      .CodeMirror {
        overflow: auto;
        background:white;
        height: 500px;
        width: 1000px;
        line-height: 1em;
        font-family: inherit;
      }
      .CodeMirror pre{

        font-size:15px;
        line-height: 1.2em;
      }
      </style>';
   $init='<script type=\'text/javascript\'>
            BX.ready(function(){
            var nl=document.getElementsByTagName("textarea");

            var editor = CodeMirror.fromTextArea(nl[0], {
                     lineNumbers: true,
                     matchBrackets: true,
                     mode: "application/x-httpd-php",
                     indentUnit: 8,
                     indentWithTabs: true,
                     enterMode: "keep",
                     tabMode: "classic"
                    });});
            </script>';
      
      $APPLICATION->AddHeadString($string);      
      $APPLICATION->AddHeadString($init);
   }
}
?>

Bitrix: GetProperty не работает в header.php

У битрикса есть небольшая беда, его же $APPLICATION->GetProperty не работает в header.php, и все пользовательские свойства страницы считываются или в контенте или в footer.php, что не всегда устраивает.

Например нужно создать кастомный h1, который обычно живет себе спокойно в header.php и мы его получаем через $APPLICATION->GetTitle(). Тогда на помощь придёт совет с предыдущей статьи. Мы просто в контенте сделаем замену и поисковик ничего не узнает о изначальном заголовке. Алгоритм такой же как и в статье «Кросс-линкинг на весь сайт»

А вот и код:
AddEventHandler("main", "OnEndBufferContent", "ChangeMyContent");
function ChangeMyContent($content){
	GLOBAL $APPLICATION;
	$h1 = $APPLICATION->GetProperty("h1");
	if (!empty($h1))
		$content = str_replace("<h1>".$APPLICATION->GetTitle(),"<h1>".$h1,$content);
}
  • 0
  • 26 марта 2011, 13:49
  • admin

Bitrix: Кросс-линкинг на весь сайт

Кросс-линкиг — сквозные ссылки через весь сайт, образно говоря ссылки, которые сидят в контенте и ведут в нужные разделы :)

В битриксе своего интерфейса этой несложной процедуры просто нет, поэтому, года 2 а то и 3 назад, пришлось написать такую вот приблуду:

AddEventHandler("main", "OnEndBufferContent", "ChangeMyContent");
function ChangeMyContent($content){
	
	$linksfile = $_SERVER["DOCUMENT_ROOT"]."/.crosslink.menu.php";
	if(file_exists($linksfile)) {
		include_once($linksfile);
		
		$array_what = $array_by = "";
		foreach ($aMenuLinks as $rpls) {
			$array_what[] = $rpls[0];
			$array_by[] = "<a href=".$rpls[1]." title='".htmlspecialchars($rpls[0], ENT_QUOTES)."' target='_blank'>".$rpls[0]."</a>";
		}
		
		$ujos = explode("<a ", $content);
		$content = "";
					
		foreach ($ujos as $key => $ololo)  {
			$miniujos = explode("/a>", $ololo);
			if (count($miniujos) == 2) 
				$content .= "<a ".$miniujos[0]."/a>".str_ireplace($array_what, $array_by, $miniujos[1]);
			else 
				$content .= str_ireplace($array_what, $array_by, $miniujos[0]);
		}
		
	}

} 

Что же тут происходит:

  1. Создадим функцию для обработки контента и будем её запускать через AddEventHandler.

  2. Нужные ссылки мы просто размещаем в файле меню crosslink, в корне сайта (с файлом работать намного быстрее чем с БД, и он уже в известной нам форме, и без каких либо преобразований, мы сразу с ним работаем).

  3. Если файл найден, мы его считываем и формируем масив замен.

  4. Дальше идёт ужасный код(но он быстрее работает чем регексп, и оказался более «стрессоустойчив»).

  5. Мы екплодим по началу тега ссылки весь текст, что бы не вставлять ссылки в ссылки.

  6. Дальше обрабатываем полученный массив, ещё раз делая екплод на закрытие тега ссылки

  7. Если получили массив, первую часть пропускаем(содержание ссылки, тайтлы, тексты, возможно альты картинок), а замены делаем во второй, которая вне ссылки

  8. Если не получили, просто делаем замены.

  9. Запихиваем все в bitrix/php_interface/init.php

  10. Profit… Но код все же нужно сделать через толковый регексп, и исключить тайтлы/альты других тегов!



зы: все написанное здесь вы используете на свой страх и риск ;)

Универсальный print_r() для битрикса

Часто для отладки приходиться выводить кучу инфы, и каждый раз писать лишнее строки лень, потому создал простую функцию для этого, почти тёску.


if (!function_exists('printr')) {
	function printr($array) {
		GLOBAL $USER;
		if (!$USER->IsAdmin()) return false;
		$args = func_get_args();
		if (count($args) > 1) {
			foreach ($args as $values)
				printr($values);
		} else {
			if (is_array($array) || is_object($array)) {
				echo "<pre>";
				print_r($array);
				echo "</pre>";
			} else {
	  			echo $array;
			}
		}
		return true;
	}
}
printr($arr1,$arr2, $str, "string");

Вставлять соответ. в афтер_коннект.пхп
  • 0
  • 03 марта 2011, 16:32
  • admin

Тип «Флажок» для свойства инфоблока

При создании дополнительных свойств инфоблока мы можем выбрать один из множества типов, например:

* Строка
* Число
* Список
* Привязка к разделам или элементам
* Файл
* и многие другие

Проблема возникает, когда мы хотим создать поле, значение которого бинарно — либо «да», либо «нет».

До сих пор лично я исхитрялся делать простое текстовое поле и предупреждать пользователей, чтобы писали туда либо «N», либо «Y». Они при этом писали всякую фигню (это присуще пользователям).

Поэтому пришлось мне сесть и написать дополнительный тип свойства — флажок, который сам в базу данных пишет либо «Y», либо «N».

Для установки дополнительного типа свойств в Битрикс, произведите следующие действия:

1. Скачайте и распакуйте куда-нибудь в свой компьютер архив (правой кнопочкой по ссылке — сохранить объект как; вес — 3 КБ; кодировка — юникод).

2. Скопируйте файл prop_checkbox.php в папку: <ваш сайт>/bitrix/templates/.default/

3. В файл /bitrix/php_interface/init.php допишите следующие две команды для подключения этого типа:

include($_SERVER['DOCUMENT_ROOT'] . '/bitrix/templates/.default/prop_checkbox.php');
AddEventHandler("iblock", "OnIBlockPropertyBuildList", Array("CIBlockPropertyCheckbox", "GetUserTypeDescription"));


После этого при создании полей инфоблока у вас появится в выборе вариант «Флажок (Y/N)».

Примеры использования:
Найти все элементы инфоблока, у которых значение свойства BLA_BLA равно «да»:
CIBlockElement::GetList(array(), array('PROPERTY_BLA_BLA' => 'Y'));


Найти все элементы инфоблока, у которых значение того же свойства не равно «да»:
CIBlockElement::GetList(array(), array('!PROPERTY_BLA_BLA' => 'Y'));


автор: Евгений Неверов
  • 0
  • 16 февраля 2010, 12:00
  • admin

Логотип компании в админке Bitrix, без изменения ядра

Когда вы работаете в админке, главный модуль проверяет на наличие в папке php_interface файла this_site_logo.php. Если он задан, он помещает содержимое, под древовидное меню левой колонки.

Вот так вот всё просто. Туда можно разместить контакты, или полезные ссылки.

Но есть ещё одно применение.

Читать дальше

Переопределение функции отправки почты

По умолчанию, за отправку почты в битрикс отвечает функция bxmail. Сама она находится в
bitrix\modules\main\tools.php

В ней проверяется один параметр, а вернее наличие функции custom_mail. Если она определена, то отправка писем происходит с её помощью.

Функцию можно задать в файле php_interface\dbconn.php (или init.php)
custom_mail($to, $subject, $message, $additional_headers, $additional_parameters);