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 Заметки по битриксу / BPOU - Bitrix blog
Рейтинг
0.00
голосов: 0

О блоге

постим своё

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

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

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

Читатели (0)

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

Транслитерация в Битриксе

$tarParams = array("replace_space"=>"-","replace_other"=>"-");
$translit = Cutil::translit($arFields["NAME"],"ru",$tarParams);

Bitrix конфиг для nginx+php_fpm (fastcgi)

server {
	listen       80;
	server_name  bitrixnginxcgi.com;
	
	location / {
		root  /var/www/bitrixnginxcgi.com;

                index  index.php index.html index.htm;
                if (!-e $request_filename) {
            	    rewrite  ^(.*)$  /bitrix/urlrewrite.php last;
                }
	}
	
	location ~ \.(php|phtml|txt)$ { 
		root /var/www/bitrixnginxcgi.com;
		access_log  /var/log/nginx/bitrixnginxcgi.log;
		if (!-f $request_filename) {
			rewrite  ^(.*)/index.php$  $1/ redirect;
		}
                # если на сайте пользователь может загрузить картинку, то сможет и загрузить эксплойт
                # который фастсиджиай с радостью выполнит. для аплоада не будем включать фастсиджиай
		if ($uri !~ "^/upload/") {
			fastcgi_pass   127.0.0.1:9000;
		}
		fastcgi_index  index.php;
		#fastcgi_param  SCRIPT_FILENAME  /var/www/bitrixnginxcgi.com$fastcgi_script_name;
		include        /etc/nginx/fastcgi_params;
	}
        
        # время жизни для картинок и прочей статики на 7 дней 
	location ~* ^.+\.(bmp|gif|jpg|jpeg|ico|png|swf|tiff|css|js|xml)$ {
		root  /var/www/bitrixnginxcgi.com;
		expires 7d;
	}

        # закрываем старые htaccess и сюда можно включить другие папки (типа гит/свн)
	location ~ /\.hta {
		deny  all;
	}

        # выведем барахлишко в сжатом виде 
	gzip on;
	gzip_types text/plain text/css text/javascript text/x-javascript application/x-javascript;
	gzip_vary on;
	gzip_http_version 1.0;
	gzip_proxied any;
        # IE6 и ниже сжатие не поймут, им как есть отдаём
        # поэтому хакеры притворяются ИЕ6, что бы не разжимать исходные данные 
	gzip_disable "MSIE [1-6]\.";
}

Subscribe: подписываем/отписываем пользователя

if(CModule::IncludeModule("subscribe")){
	if ($_POST["SUBSCRIBE"] == "Y") {
		$arFields = Array(
			"USER_ID" => $USER->GetID(),
			"FORMAT" => "html",
			"EMAIL" => $USER->GetEmail(),
			"ACTIVE" => "Y",
			"RUB_ID" => array()
		);
		$subscr = new CSubscription;
		$ID = $subscr->Add($arFields);
		if($ID>0) {
			CSubscription::Authorize($ID);
		}
	} else {
		$subscription = CSubscription::GetByEmail($USER->GetEmail());
		if($subscription->ExtractFields("str_")) {
			$ID = (integer)$str_ID;
		}
		if ($ID >0) {
			$res = CSubscription::Delete($ID);
		}
	}
}

Получаем UF свойства пользователя (отдельная функция)

function get_user_prop ($id, $prop = "*") {
	if (!($id > 0)) return false;
	if (!is_array($prop)) $prop = array($prop);
	global $DB;
	$res = $DB->query("SELECT ".implode(",", array_map("mysql_real_escape_string", $prop))." FROM `b_uts_user` WHERE VALUE_ID = $id");
	$res = $res->Fetch();
	if (!empty($res)) {
		foreach ($res as $key => $value) {
			if (preg_match("/^a:\d+:{.*?}$/", $value)) {
				$res[$key] = unserialize($value);
			}
		}
	}
	return $res;
}

У анонимных пользователей не работает поиск/теги

Уже второй раз эта проблема, забыл как решил первый раз и пришлось шишку набивать опять.
В модуле поиска в файле search.php в функции проверки прав CheckPermissions грабли с правами, потому мы просто делаем ее обрезанной

function CheckPermissions($FIELD = "sc.ID"){return "((1=1))";}

Где и как эти права задаются в админке, не ясно

Как вывести капчу в Bitrix (работа с custom captcha)

<?
$cpt = new CCaptcha();
$cpt->SetCode();
?>
<label>
	<input type="hidden" name="captcha_sid" value="<?= $cpt->GetSID() ?>">
	<img src="/bitrix/tools/captcha.php?captcha_code=<?=$cpt->sid;?>" alt="" width="135" height="40"/>
	<abbr class="refresh">обновить
изображение</abbr>
</label>
<label>
	<span>Введите символы с картинки: <b>*</b></span> 
	<input type="text" size="12" name="captcha"/>
	<small>Не верно введены символы с картинки</small>
</label>

That's all folks

Отправить файл на скачивание

Что бы отправить файл на скачивание, нужно создать промежуточный файл, который будет выдавать заголовок «Атача». Джаваскрипт этого сделать не может тоже. Что же делать?

У битрикса есть такой стандартный файл, можно все делать через него, ссылку можно сделать так
"/bitrix/admin/fileman_file_download.php?path=".urlencode($filepath)
правда нужно быть залогиненым и с правами на файлманагер, потому мы сделаем свой файл по мотивам fileman_file_download.php.
назовем его getfile.php и положим в корень
<?
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
CModule::IncludeModule("fileman");

$strWarning = "";
$site = CFileMan::__CheckSite($site);
$DOC_ROOT = CSite::GetSiteDocRoot($site);

$io = CBXVirtualIo::GetInstance();
$path = $io->CombinePath("/", $path);

if (preg_match("/bitrix/i",$path))
	die("its wrong");

$arPath = Array($site, $path);
$arParsedPath = CFileMan::ParsePath(Array($site, htmlspecialcharsex($path)));
$abs_path = $DOC_ROOT.$path;

if(!$io->FileExists($abs_path))
	$strWarning = GetMessage("FILEMAN_FILENOT_FOUND")." ";

if(strlen($strWarning) <= 0)
{
	$flTmp = $io->GetFile($abs_path);
	$fsize = $flTmp->GetFileSize();
	header("Content-Type: application/force-download; name=\"".$io->GetPhysicalName($arParsedPath["LAST"])."\"");
	header("Content-Transfer-Encoding: binary");
	header("Content-Length: ".$fsize);
	header("Content-Disposition: attachment; filename=\"".$io->GetPhysicalName($arParsedPath["LAST"])."\"");
	header("Expires: 0");
	header("Cache-Control: no-cache, must-revalidate");
	header("Pragma: no-cache");
	$flTmp->ReadFile();
	die();
}

$APPLICATION->SetTitle(GetMessage("FILEMAN_FILEDOWNLOAD")." \"".$arParsedPath["LAST"]."\"");
?>
<font class="text"><?=$arParsedPath["HTML"]?></font>

<?
ShowError($strWarning);
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_after.php"); 
?>


Теперь можно сделать скриптовую заглушку и даже ссылки не менять
<script type="text/javascript">
	$("a[href$=.pdf]").click(function(){
		var url = $(this).attr("href");
		window.open("/getfile.php?path="+encodeURIComponent(url));
		return false;
	});
</script>
Код выше, все файлы pdf отправляет на диалог для скачивания :)

Получить файлы с базы одним запросом

$res = CFile::GetList(array("ID"=>"asc"), array("@ID" => implode(",",$collect_imgs)));

while($res_arr = $res->GetNext()) {
	$res_arr["SRC"] = "/upload/".$res_arr["SUBDIR"]."/".$res_arr["FILE_NAME"];
	$arResult["YOURIMAGES"][$res_arr["ID"]] = $res_arr;
}

Где $collect_imgs — массив айдишников картинок

Табличные шаблоны компонент в Битриксе

Как же я хуею, от этого убожества.
Столько лет на рынке, они все на месте, все убогие таблички, во всех компонентах БЛЯ.

Буду сюда выкладывать компоненты, в которых буду удалять таблицы, и их стили.
Со временем.

Везде форма логина/меню заблокированы

Вы перенесли сайт на новое место, а везде для анонимуса показывается форма логина, все меню заблокированы? Не беда! :)

Первым делом в настройках сайта убираете/прописываете наново путь к сайту на диске.
Не помогло, руки не стали расти выше? :)

Тогда вам нужно в корне сайта, создать/отредактировать файл .access.php! Да, все правильно, начинается на точку (стандартный фтп-манагер такие файлы может не видеть, так как в UNIX системах они называются скрытые — копните настройки)

А в файле должна появится строчка:
$PERM["/"]["*"]="R";

Не забываем, что это пыхапы файл ;)
<?
$PERM["/"]["*"]="R";
?>