Category: Компьютер

[Exception] DateTime::__construct(): It is not safe to rely on the system’s timezone settings.

Получил на сервере где работают сайты на битриксе такую вот ошибку

[Exception]  DateTime::__construct(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. (0) /var/www/bitrix/data/www/site.ru/bitrix/modules/main/lib/type/datetime.php:22

Лечится просто. В php.ini ищем

;date.timezone =

и меняем на

date.timezone = “Europe/Moscow”

далее перезапускам apache и все работает

Photoshop обрезать изображение по контуру другого изображения

Так как редко сталкиваюсь с данной процедурой постоянно забываю как это делать ;) Заношу себе в заметки, чтобы потом опять не искать в поисковике.

Открываем изображение в фотошопе и поверх его накладываем другим слоем то изображение которое нужно обрезать. В слоях выбираем нужное изображение под обрезку и наживаем комбинацию Ctrl+Alt+G.

Вот и все =) контур обрезался по изображению из нижнего слоя.

Fatal error: Call to undefined function curl_init() in Bitrix

В битриксе на виртуальной машине после первой установки сайт получил ошибку

Fatal error: Call to undefined function curl_init() in

Лечим:

1. Возможно пакета у Вас нет, ставим его — yum install php-curl

2. Если пакет есть то смотрим — ls /etc/php.d/
скорее всего там будет лежать файл curl.ini.disabled
если это так, то

mv /etc/php.d/curl.ini.disabled /etc/php.d/curl.ini

и

/etc/init.d/httpd restart

Ошибка при выгрузке в 1С из Битриксе MySQL Query Error: select ID, ATTRIBUTES from b_xml_tree where

Получил вот такую ошибку на одном из поектов при выгрузки из 1С в Битрикс.

MySQL Query Error: select ID, ATTRIBUTES from b_xml_tree where (ID = 1) and (NAME = 'КоммерческаяИнформация') [Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '=']

Unknown

Сразу напрашивается вопрос=)  С чем это связано?

С тем, что таблицы в БД в разной кодировке. Приведите к одной кодировке и все заработает. Вот такой SQL коммандой это делается:

alter database имя_бд default character set utf8;

Обрезать текст в битриксе

Для обрезания текста в битриксе есть функция TruncateText, которая отрезает от строки все символы свыше указанной длины и длбавляет в окнчании три точки.
Привер:

$str = "Строка";
echo TruncateText($str, 3);

Так же довольно таки часто встают задачи, обрезать текст с учетом html тегов. Для этого есть функция html_cut класса CTextParser, которая отрезает HTML/text до указанной длины с корректным закрытием тегов.
Привер:

$obParser = new CTextParser;
if($arParams["PREVIEW_TRUNCATE_LEN"] > 0)
$arItem["PREVIEW_TEXT"] = $obParser->html_cut($arItem["PREVIEW_TEXT"], $arParams["PREVIEW_TRUNCATE_LEN"]);

Есть задачи немного и посложнее.=) Необходимо обрезать текст по словам, а не по символам. К нам придет напомощь такая вот функция:

// $str - исходная строка
// $word_limit - количество символов, которое нам нужно
function anouncetext($str, $word_limit) {
	preg_match("/.{".$word_limit."}[^.!;?]*[.!;?]/si", $str.". ", $matches);
	$str=$matches[0];
	echo $str;
}

Наложение водяного знака средствами битрикс

В Битрике есть возможность реализовать наложение водяного знака на изображения. Можно наносить как изображения, так и текст. Чтобы нанести водяной знак на фотографию достаточно передать параметры фильтра:

$arFilter_watermark = Array(Array('name' => 'watermark',   'position' => 'br', 'size'=>'real',   'type'=>'image',   'alpha_level'=>'10',   'file'=>$_SERVER['DOCUMENT_ROOT'].'/img/watermark.png',    ),);

Возможные значения параметров:
position — указание расположения водяного знака на изображении возможно в двух нотациях:
tl | tc | tr | ml | mc | mr | bl | bc | br
или
topleft | topcenter | topright | centerleft | center | centerright | bottomleft | bottomcenter | bottomright

size — big | medium | small | real, для произвольного изменения масштаба возможно указание коэффициента через параметр ‘coefficient’, параметр ‘real’ применим только для изображений (‘type’=>’image’)
type — text | image
alpha_level — прозрачность от 0 до 100, где 0 = прозрачно, 100 = непрозрачно
text — текст водяного знака
font — путь к файлу с TTF-шрифтом
color — цвет в HEX-формате

Пример реализации:

$arFilters = Array(array("name" => "watermark", "position" => "right", "size"=>"real", 'type'=>'image', "file"=>$_SERVER['DOCUMENT_ROOT']."/images/watermark.png"));

Вместо /images/watermark.png подставляете свой путь к изображению водяного знака.

Далее при ресайзе изображения добавляете вывод фильтра $arFilters

$PICTURE = CFile::ResizeImageGet($arResult["PREVIEW_PICTURE"], Array('width'=>455, 'height'=>315), BX_RESIZE_IMAGE_EXACT, true, $arFilters);

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

<img src="<?=$PICTURE["src"]?>" alt="<?=$arResult["NAME"]?>" title="<?=$arResult["NAME"]?>" />

Выводит записи журнала действий пользователей в административной части в Django

Задача: вывести записи журнала действий пользователей в административной части в Django
Решение: Сама модель логирования в Django вот такая LogEntry и находится в django.contrib.admin.models. Все что нудно сделать это обычным способом вывести модель в админке.
В файле admin.py

# -*- coding: utf-8 -*-
from django.contrib import admin
from django.contrib.admin.models import LogEntry

class LogEntryAdmin(admin.ModelAdmin):
    list_display = ('__str__', 'action_time', 'user', 'content_type', 'object_id', 'object_repr', 'action_flag', 'change_message')
    list_filter = ('content_type',)
    search_fields = ['user__username',]
    date_hierarchy = 'action_time'
admin.site.register(LogEntry, LogEntryAdmin)

Удаление файла при удалении записи в модели в Django

Сигнал который удаляет физически файл с диска при удалении объекта в модели.

from django.db.models.signals import post_delete
from django.dispatch import receiver

@receiver(post_delete, sender=Photo)
def photo_post_delete_handler(sender, **kwargs):
    photo = kwargs['instance']
    storage, path = photo.original_image.storage, photo.original_image.path
    storage.delete(path)

Битрикс капча — bitrix CAPTCHA

Как подключить капчу в битриксе к своим скриптам? Да очень просто. Все расписано в документации. И так подключаем капчу битрикс в свой скрипт.

Сначала генерируем капчу:

include_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/classes/general/captcha.php");
$cpt = new CCaptcha();
$captchaPass = COption::GetOptionString("main", "captcha_password", "");
if(strlen($captchaPass) <= 0){
	$captchaPass = randString(10);
	COption::SetOptionString("main", "captcha_password", $captchaPass);
}
$cpt->SetCodeCrypt($captchaPass);

Легким движением выводим капчу:

<input name="captcha_code" value="<?=htmlspecialchars($cpt->GetCodeCrypt());?>" type="hidden">
<img src="/bitrix/tools/captcha.php?captcha_code=<?=htmlspecialchars($cpt->GetCodeCrypt());?>">
<input id="captcha_word" name="captcha_word" type="text">

Проверяем капчу на вшивость:

if($APPLICATION->CaptchaCheckCode($_POST["captcha_word"], $_POST["captcha_code"])){
    echo 'капча валидная';
}