Рубрика: Софт

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 'капча валидная';
}

Формирование меню из элементов инфоблока в Битрикс

Задача: сформировать левое меню на сайте работающем на битриксе из элементов информационного блока.

Решение: создаем файл .left.menu_ext.php в директории в котором должно выводиться меню и наполняем следующим кодом

<?
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();

global $APPLICATION;

if(CModule::IncludeModule("iblock")) {

    $IBLOCK_ID = 6; // указываем инфоблок с элементами

    $arOrder = Array("SORT"=>"DESC");
    $arSelect = Array("ID", "NAME", "IBLOCK_ID", "DETAIL_PAGE_URL");
    $arFilter = Array("IBLOCK_ID"=>$IBLOCK_ID, "ACTIVE"=>"Y");
    $res = CIBlockElement::GetList($arOrder, $arFilter, false, false, $arSelect);

    while($ob = $res->GetNextElement()) // наполняем массив меню пунктами меню
    {
        $arFields = $ob->GetFields();
        $aMenuLinksExt[] = Array(
            $arFields['NAME'],
            $arFields['DETAIL_PAGE_URL'],
            Array(),
            Array(),
            ""
        );
    }   
}

$aMenuLinks = array_merge($aMenuLinksExt, $aMenuLinks); // меню сформировано
?>

Bitrix не отправляется почта

В одном проекте интернет магазина столкнулся с такой проблемой. При оформлении заказа не уходит письмо о новом заказе клиенту и администратору сайта, но другие почтовые события например такие как регистрация в битриксе работает отлично. Проблема в битриксе таилась в следующем: в файле /bitrix/php_interface/dbconn.php была объявлена константа define(«BX_CRONTAB_SUPPORT», true); вот ее и надо перевести в не истинное состояние  define(«BX_CRONTAB_SUPPORT», false);. После чего все заработало.

Django No module named _imagingft

Получил такую ошибку при использовании пакета django-simple-captcha на своем Mac OS 1.7

Request Method: 	GET
Request URL: 	http://127.0.0.1:8000/captcha/image/1d5040700009449016d09eb56c9c55e11560844d/
Django Version: 	1.4.3
Exception Type: 	ImportError
Exception Value: 	

The _imagingft C module is not installed

Exception Location: 	/Library/Python/2.7/site-packages/PIL-1.1.7-py2.7-macosx-10.7-intel.egg/ImageFont.py in __getattr__, line 34
Python Executable: 	/usr/bin/python

Решается это следующим образом

sudo pip uninstall PIL
sudo rm -rf /Library/Python/2.7/site-packages/PIL*

sudo ln -s /usr/X11/include/freetype2 /usr/include/ 
sudo ln -s /usr/X11/include/ft2build.h /usr/include/ 
sudo ln -s /usr/X11/lib/libfreetype.6.dylib /local/lib/ 
sudo ln -s /usr/X11/lib/libfreetype.6.dylib /local/lib/libfreetype.dylib 

sudo pip install PIL