php скрипты

Отложенные функции

04.04.2013 Bitrix, php скрипты , ,

В шаблоне компонента

<?$this->SetViewTarget("some_block");?>
	<div class="some_text_block">
		<?foreach ($arSome as $some) echo $some."<br/>"?>
	</div>
<?$this->EndViewTarget();?>

В шаблоне страниц

<?=$APPLICATION->ShowViewContent('some_block');?>

Создание символических ссылок PHP symlink()

01.04.2013 Bitrix, php, php скрипты No comments , ,

<?
$path = '/home/sait/www';
$folder = 'include';
if(symlink($path."/".$folder,$_SERVER['DOCUMENT_ROOT']."/".$folder)){
	echo "<font color=green>Символические ссылка удачно созданы</font>";
}else{
	$strError = 'Не удалось создать ссылку на папку '.$folder.', обратитесь к администратору сервера';
}
?>

Много сайтовость Bitrix, создание гипер ссылок

27.03.2013 Bitrix, php скрипты No comments ,

<html>
<head><title>Создание ссылок на папки bitrix и upload</title></head>
<body>
<?
error_reporting(E_ALL & ~E_NOTICE);
@ini_set("display_errors",1);

if ($_POST['path'])
   $path = rtrim($_POST['path'],"/\\");
else
   $path = '../site2/www';

if ($_POST['create'])
{
   if (preg_match("#^/#",$path))
      $full_path = $path;
   else
      $full_path = realpath($_SERVER['DOCUMENT_ROOT'].'/'.$path);

   if (file_exists($_SERVER['DOCUMENT_ROOT']."/bitrix"))
      $strError = "В текущей папке уже существует папка bitrix";
   elseif (is_dir($full_path))
   {
      if (is_dir($full_path."/bitrix"))
      {
         if (symlink($path."/bitrix",$_SERVER['DOCUMENT_ROOT']."/bitrix"))
         {
            if(symlink($path."/upload",$_SERVER['DOCUMENT_ROOT']."/upload"))
               echo "<font color=green>Символические ссылки удачно созданы</font>";
            else
               $strError = 'Не удалось создать ссылку на папку upload, обратитесь к администратору сервера';
         }
         else
            $strError = 'Не удалось создать ссылку на папку bitrix, обратитесь к администратору сервера';
            
      }
      else
         $strError = 'Указанный путь не содержит папку bitrix';
   }
   else
      $strError = 'Неверно указан путь или ошибка прав доступа';
   
   if ($strError)
      echo '<font color=red>'.$strError.'</font><br>Исходный путь: '.$full_path;
}
?>
<form method=post>
Путь к папке, содержащей папки bitrix и upload: <input name=path value="<?=htmlspecialchars($path)?>"><br>
<input type=submit value='Создать' name=create>
</form>

Добавление необходимых полей в кеш для использования в component_epilog.php

26.03.2013 Bitrix, php скрипты No comments , ,

Например, если нужно вручную добавить элемент в цепочку навигации, а в component_epilog.php попадают не все необходимые поля (например, передалось только имя, а ссылки нет).

Тогда в файле result_modifier.php пишем:

$cp = $this->__component;
if (is_object($cp))
$cp->SetResultCacheKeys(array("SECTION_PAGE_URL"));

после чего в файле component_epilog.php становится доступным  $arResult[«SECTION_PAGE_URL»] (т.к. мы принудительно записали его в кеш).

Замена изображений внутри Detail_Text на show_image()

26.03.2013 Bitrix, php скрипты No comments , ,

Оригинал статьи http://dev.1c-bitrix.ru/community/blogs/Docs_and_other/7222.php

Доброго времени суток, уважаемое сообщество!!!

Поступила тут одна «хотелка» от клиента. спешу поделиться

Итак: есть сайт, на котором публикуется (точнее пока что планируется к публикации) огромное количество статей. В этих статьях по тексту контент-менеджеры могут накидывать какие-то изображения, поясняющие текст. НО! заниматься подгонкой изображений к читабельному виду для такого количества статей им то ли лень, то ли денег жалко … и захотел клиент, чтобы все-таки изображения ужимались. причем, ужимались сервером, а не браузером клиента.

И вот родилась идея:

в компоненте детального вывода статьи в файле result_modifier создаею обработчик:

<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die(); 
$pattern="/<img[^>]+src=(\"|')(.+?)(\"|')[^>]*>/si"; 
preg_match_all($pattern,$arResult["DETAIL_TEXT"],$matches); 
$startfloat="right"; 
$arResult["DETAIL_TEXT"]=str_replace(SITE_SERVER_NAME,"",$arResult["DETAIL_TEXT"]); 
$arResult["DETAIL_TEXT"]=str_replace(str_replace("http://","http://www.",SITE_SERVER_NAME),"",$arResult["DETAIL_TEXT"]); 
foreach ($matches[0] as $k=>$image) { 
    $imgSrc='<а  class="fancy" href="'.$matches[2][$k].'" >'; 
    $imgSrc.=CFile::ShowImage($matches[2][$k], 300, 300, "style='float:".$startfloat.";margin:5px;'", "", false); 
    $imgSrc.="</а>"; 
    $arResult["DETAIL_TEXT"]=str_replace($image,$imgSrc,$arResult["DETAIL_TEXT"]); 
    if($startfloat=="right") $startfloat="left"; else $startfloat="right"; 
} 
?> 

в итоге, все изображения ужимаются в 300 на 300, а если кто хочет — в fancybox (если конечно к вашему сайту подключена данная библиотека) может посмотреть в полном размере…

P.S. Спасибо другу моему, Андрею — великому гуру веб-мира, за постоянную помощь с регулярными выражениями (да и не только), с которыми я все никак не подружусь

ДОБАВЛЕНИЕ ОТ 22.03: оставляем у изображений title и alt

текст файла result_modifier немного видоизменился:

<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
$patternSRC="/[^>]+src=(\"|')(.+?)(\"|')[^>]*>/si";
$pattern2="/(alt|src|title)=(\"|')(.+?)(\"|')/si";
$pattern="/<img([^>]*)\/?>/si";
preg_match_all($pattern,$arResult["DETAIL_TEXT"],$matches);
$modifiedImages=array();
foreach($matches[1] as $k=>$image){
    preg_match_all($pattern2,$image,$Attrmatches);
    $attributes=array();
    foreach($Attrmatches[1] as $kT=>$Tmp){
     $attributes[$Tmp]=$Attrmatches[3][$kT];
    }
    $modifiedImages[$matches[0][$k]]=$attributes;
}
$startfloat="right";
$arResult["DETAIL_TEXT"]=str_replace(SITE_SERVER_NAME,"",$arResult["DETAIL_TEXT"]);
$arResult["DETAIL_TEXT"]=str_replace(str_replace("http://","http://www.",SITE_SERVER_NAME),"",$arResult["DETAIL_TEXT"]);
foreach ($modifiedImages as $image=>$attributes) {
    $imgSrc='<a  class="fancy" href="'.$attributes["src"].'" title="'.$attributes["title"].'" >';
    $imgSrc.=CFile::ShowImage($attributes["src"], 300, 300, "alt='".$attributes["alt"]."' title='".$attributes["title"]."'  style='float:".$startfloat.";margin: 5px;'", "", false);
    $imgSrc.="</a>";
    $arResult["DETAIL_TEXT"]=str_replace($image,$imgSrc,$arResult["DETAIL_TEXT"]);
    if($startfloat=="right") $startfloat="left"; else $startfloat="right";
}
?>

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

подключение LANG файла bitrix

21.03.2013 Bitrix, php скрипты No comments ,

Есть файл

/home/bitrix/www/bitrix/php_interface/include/sale_delivery/delivery_ems_ibatt.php

для него нужно подключить LANG файл

IncludeTemplateLangFile('/bitrix/templates/.default/sale_delivery/delivery_ems_ibatt.php');

а вот путь, где должен лежать сам LANG файл

/home/bitrix/www/bitrix/templates/.default/lang/ru/sale_delivery/delivery_ems_ibatt.php

P.S. Все переменные в ланг файлах должны быть уникальными, т.е если в компоненте news.list есть

<?=GetMessage('TRYAM')?>

и после вызывается другой компонент в котором есть такая же переменная, то последний компонент перезапишет $MESS[‘TRYAM’];

при регистрации пользователя, есть птичка (подписаться на новости)

20.03.2013 Bitrix, php скрипты No comments , , , ,

при регистрации пользователя, есть птичка (подписаться на новости)

// Подписка на рассылку при регистрации

AddEventHandler("main", "OnAfterUserAdd", "OnAfterUserAddHandler");

function OnAfterUserAddHandler(&$arFields)
{

   $errors = Array();

   if($arFields["ID"]>0 && $arFields["UF_SUBSCRIBE"])
   {

      if(CModule::IncludeModule("subscribe")) {
      
         $USER_ID = $arFields["ID"];
         $EMAIL = $arFields["EMAIL"];
      
         $arFilter = array(
            "ACTIVE" => "Y",
            "LID" => "s1",
            "VISIBLE"=>"Y",
         );
      
         $rsRubrics = CRubric::GetList(array(), $arFilter);
         $arRubrics = array();
         while($arRubric = $rsRubrics->GetNext()) $arRubrics[] = $arRubric["ID"];
      
         $obSubscription = new CSubscription;
      
         $rsSubscription = $obSubscription->GetList(array(), array("USER_ID" => $USER_ID));
         $arSubscription = $rsSubscription->Fetch();
   
         if(is_array($arSubscription))
         {
            $rs = $obSubscription->Update(
               $arSubscription["ID"],
               array(
                  "FORMAT" => "html",
                  "RUB_ID" => $arRubrics,
               ),
               false
            );
         }
         else
         {
            $ID = $obSubscription->Add(array(
               "USER_ID" => $USER_ID,
               "ACTIVE" => "Y",
               "EMAIL" => $EMAIL,
               "FORMAT" => "html",
               "CONFIRMED" => "Y",
               "SEND_CONFIRM" => "N",
               "RUB_ID" => $arRubrics,
            ));
         }
      
      }
      
   }
   

}

Нарезка картинок для свойства FILE

17.03.2013 Bitrix, php скрипты No comments , ,

id свойства 31, свойство множественное

AddEventHandler("iblock", "OnBeforeIBlockElementAdd",	Array("MyClass",	"OnBeforeIBlockElementAddHandler"));
		class MyClass
		{
			// создаем обработчик события "OnAfterIBlockElementAdd"
			function OnBeforeIBlockElementAddHandler(&$arFields)
			{
				
				if($arFields["IBLOCK_ID"] == 14){
					// dbg($arFields,true);
					foreach($arFields[PROPERTY_VALUES][31] as &$file):
					   CAllFile::ResizeImage(
						 $file, 
						 array("width" => "200", "height" => "200"), 
						 BX_RESIZE_IMAGE_PROPORTIONAL);
					endforeach;
				}

			}
		}

Отложенные функции как в BITRIX

16.03.2013 php, php скрипты , ,

header.php

$GLOBALS['TITLE'] = ''; //тут будет храниться заголовок страницы
//тут мы пишем наш код всех нужных нам компонентов
function settitle ($title) {
	// global $GLOBALS['TITLE'];
	$GLOBALS['TITLE'] = $title;
}
function showtitle () {
	echo "{TITLE}"; //выводим временный костыль для автозамены буферизированного контента
}
ob_start();
echo "<html><head><title>";
showtitle (); //выводим заголовок страницы
echo "</title></head><body>";

index.php

<?include('header.php')?>
<?php
settitle("Пример  gfbfdg fdgdfgfdgотложенных функций"); //обратите снивание заголовок наш уже вывелся выше
//но он был временно буферизирован и не попал на страничку
?>
<?include('footer.php')?>

footer.php

$content=ob_get_clean();//получаем весь буфер и очищаем его
//а теперь самое интересное замена титла на последний установленній
$content=preg_replace("!{TITLE}!", $GLOBALS['TITLE'], $content);
//выводим буферизированный контент
echo $content;

ЧПУ своими руками

16.03.2013 php, php скрипты No comments

<IfModule mod_rewrite.c>
	RewriteEngine On
	RewriteRule ^catalog/([^/.]+)/([^/.]+)/?$ catalog/index.php?SECTION_CODE=$1&ELEMENT_ID=$2 [L]
	RewriteRule ^catalog/([^/.]+)/?$ catalog/index.php?SECTION_CODE=$1 [L]
</IfModule>