Простые страницы

С дизайном:
<? require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("Hello word"); ?>
<? require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>


Без дизайна:
<? require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
CModule::IncludeModule("iblock"); ?>
<? require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_after.php"); ?>

Подсветки 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

Когда начинаешь кодить, часто делаешь один и те же вещи. Когда есть какие-то заготовки, ещё терпимо, когда нет, приходится писать ручками всё, потому решил выложить для копипаста сюда код обычного шаблона с архивчиком :)

Это будет header.php:
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die(); ?>
<?IncludeTemplateLangFile(__FILE__);?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=<?=LANG_CHARSET;?>"/>
<? $APPLICATION->ShowMeta("robots")?>
<? $APPLICATION->ShowMeta("keywords")?>
<? $APPLICATION->ShowMeta("description")?>
<title><? $APPLICATION->ShowTitle()?></title>

	<link rel="shortcut" href="/favicon.ico" type="image/x-icon" />
	<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" />
	<link href="<?=$APPLICATION->GetTemplatePath("fonts.css") ?>" type="text/css" rel="stylesheet" />

<? $APPLICATION->ShowCSS();?>
<? $APPLICATION->ShowHeadStrings()?>
<? $APPLICATION->ShowHeadScripts()?>

<!--[if lte IE 6]>
	<script type="text/javascript" src="<?=$APPLICATION->GetTemplatePath("js/pngfix.js") ?>"></script>
	<script type="text/javascript">if (document.all) {DD_belatedPNG.fix('img, div, ul, li, a, div img');}</script>
<![endif]-->
<!--[if lte IE 6]><link href="<?=$APPLICATION->GetTemplatePath("styleie.css") ?>" type="text/css" rel="stylesheet" /><![endif]-->
<!--[if IE 7]><link href="<?=$APPLICATION->GetTemplatePath("styleie7.css") ?>" type="text/css" rel="stylesheet" /><![endif]-->
<!--[if lte IE 7]>
	<script type="text/javascript" src="<?=$APPLICATION->GetTemplatePath("js/roundie.js") ?>"></script>
	<script type="text/javascript">
		if (document.all) {
			DD_roundies.addRule('.someelmt', '6.9px');
		}
	</script>
<![endif]-->

<script type="text/javascript" src="<?=$APPLICATION->GetTemplatePath("js/jquery.js")?>"></script>
<script type="text/javascript" src="<?=$APPLICATION->GetTemplatePath("js/user.js")?>"></script>
</head>

<body>

<? $APPLICATION->ShowPanel();?>

<?$APPLICATION->IncludeComponent("bitrix:menu", "", array(
	"ROOT_MENU_TYPE" => "top",
	"MENU_CACHE_TYPE" => "N",
	"MENU_CACHE_TIME" => "3600",
	"MENU_CACHE_USE_GROUPS" => "Y",
	"MENU_CACHE_GET_VARS" => "",
	"MAX_LEVEL" => "1",
	"CHILD_MENU_TYPE" => "",
	"USE_EXT" => "Y"
	),
	false
);?>

<?$APPLICATION->IncludeComponent("bitrix:system.auth.form", "", Array(
	"REGISTER_URL" => "/",	// Registration page
	"PROFILE_URL" => "/profile/",	// Profile page
	"SHOW_ERRORS" => "N",	// Show errors
	),
	false
); ?>			

<?$APPLICATION->IncludeFile(
	$APPLICATION->GetTemplatePath("include_areas/inc.php"),
	Array(),
	Array("MODE"=>"php")
);?>

<?$APPLICATION->IncludeComponent("bitrix:main.include", ".default", array(
	"AREA_FILE_SHOW" => "sect",
	"AREA_FILE_SUFFIX" => "edit",
	"AREA_FILE_RECURSIVE" => "Y",
	"EDIT_TEMPLATE" => "edit_sect.php"
	),
	false,
	array(
		"ACTIVE_COMPONENT" => "Y"
	)
);?>

<? $APPLICATION->ShowTitle();	?>

Список файлов:
* script.js — его может и не быть
* template_styles.css — стили сайта
* styles.css — стили контента, может не быть, но лучше разделить, что бы в редакторе было так же как и на сайте
* .styles.php, description.php — служебные файлы: в первом прописываются имена стилей, в другом описание шаблона

Дополнительные файлы:
* pngfix.js, roundie.js, styleie.css, styleie7.css — для поддержки ИЕ6-7, семейки выродков
* jquery.js, user.js — пользовательские скрипты
* fonts.css — пользовательские шрифты

Список компонент:
* админпанель
* меню
* авторизация
* включаемая область (шаблонная и компонент)
* заголовок

Дальше идёт footer.php но там всё проще, оставим код только для для ГуглАналитикс
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
IncludeTemplateLangFile(__FILE__);?>

<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-yournumber-1");
	pageTracker._setDomainName("yourdomain.com");

	pageTracker._addOrganic("mail.ru", "q");
	pageTracker._addOrganic("rambler.ru", "words");
	pageTracker._addOrganic("nigma.ru", "s");
	pageTracker._addOrganic("blogs.yandex.ru", "text");
	pageTracker._addOrganic("webalta.ru", "q");
	pageTracker._addOrganic("aport.ru", "r");
	pageTracker._addOrganic("akavita.by", "z");
	pageTracker._addOrganic("meta.ua", "q");
	pageTracker._addOrganic("bigmir.net", "q");
	pageTracker._addOrganic("tut.by", "query");
	pageTracker._addOrganic("all.by", "query");
	pageTracker._addOrganic("i.ua", "q");
	pageTracker._addOrganic("online.ua", "q");
	pageTracker._addOrganic("a.ua", "s");
	pageTracker._addOrganic("ukr.net", "search_query");
	pageTracker._addOrganic("search.com.ua", "q");
	pageTracker._addOrganic("search.ua", "query");
	pageTracker._addOrganic("poisk.ru", "text");
	pageTracker._addOrganic("km.ru", "sq");
	pageTracker._addOrganic("liveinternet.ru", "ask");
	pageTracker._addOrganic("gogo.ru", "q");
	pageTracker._addOrganic("gde.ru", "keywords");
	pageTracker._addOrganic("quintura.ru", "request");
	pageTracker._initData();
	pageTracker._trackPageview();

} catch(err) {}</script>

</body>
</html>


А теперь ссылочка на архив
  • 0
  • 14 апреля 2011, 12:42
  • admin

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

Не работают шаблоны отправки писем?

Или не работает форма восстановления пароля, не приходят письма? :)

Тогда вам просто нужно:
а. добавить шаблон 
б. присвоить шаблон нужной языковой версии

Отправка писем используя шаблон

В главном модуле есть Почтовые события:
* Почтовые шаблоны /message_admin.php?lang=ru
* Типы почтовых событий /bitrix/admin/type_admin.php?lang=en

Что бы отправить письмо, используя шаблон, мы сначала создадим тип почтового события (например TEXT_MESSAGE с параметрами #TEXT_MESSAGE#, #MAIL# и #DATE#), а затем шаблон для него (Например «Сообщение с сайта сайт.орг», указав все параметры в тексте, а #MAIL# в поле кому).

Дальше всё просто, используя главный модуль (его класс CEvent), мы отправляем письмо по нашему шаблону
$arMail = array(
	"DATE" => date("Y/m/d",strtotime("+2 hours")),
	"MAIL" => "test@ukr.net",
	"TEXT_MESSAGE" => "Hello world"    	
);
CEvent::Send("TEXT_MESSAGE", array("en"), $arMail);
  • 0
  • 24 января 2010, 01:09
  • admin

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

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

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

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

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