метка: php

Резайл (Thumbnail) изображения в bitrix №2

Метод создает уменьшенную копию изображения sourcePath.

bool
CreateThumbnail(
 string sourcePath,
 string previewPath,
 int maxWidth,
 int maxHeight
);
sourcePath Абсолютный путь к исходному изображению, для которого необходимо сделать уменьшенную копию.
previewPath Абсолютный путь к файлу, в который будет сохранена уменьшенная копия изображения.
maxWidth Максимальная ширина уменьшенного изображения.
maxHeight Максимальная высота уменьшенного изображения
<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/classes/general/wizard.php");

$success = CWizardUtil::CreateThumbnail($_SERVER["DOCUMENT_ROOT"]."/big.gif",$_SERVER["DOCUMENT_ROOT"]."/small.gif", 100, 100);

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");
?>

Ресайз изображений Bitrix

Ресайз изображений Bitrix

Встала задача делать миниатурки из изображений загруженных в анонсе и изображений загруженных в дополнительное свойство PHOTO.
В этом нам поможет CFile::ResizeImageGet. Синтаксис у него таков

array CFile::ResizeImageGet(
    mixed file,
    array arSize,
    const resizeType = BX_RESIZE_IMAGE_PROPORTIONAL,
    bool bInitSizes = false
);

file — сомо изображение
arSize — массив с размерами для изображения
resizeType — тип масштабирования:
—— BX_RESIZE_IMAGE_EXACT — масштабирует в прямоугольник $arSize без сохранения пропорций
—— BX_RESIZE_IMAGE_PROPORTIONAL — масштабирует с сохранением пропорций, размер ограничивается $arSize
—— BX_RESIZE_IMAGE_PROPORTIONAL_ALT — масштабирует с сохранением пропорций, размер ограничивается $arSize, улучшенна обработка вертикальных картинок.

Пример работы на свойстве PHOTO

$e=CIBlockElement::GetProperty($arResult["IBLOCK_ID"],$arResult['ID'],array(),array("CODE"=>"PHOTO"));
while($xx=$e->Fetch())
{	if($x=CFile::GetFileArray($xx['VALUE']))
	{	$y=CFile::ResizeImageGet(
			$xx['VALUE'],
			array("width" => 150, "height" => 150),
			BX_RESIZE_IMAGE_EXACT,
			false
		);
		$k=$xx["DESCRIPTION"];
		echo'<a href="'.$x['SRC'].'"><img src="'.$y["src"].'" alt="'.$k.'" title="'.$k.'"/></a>';
	}
}

Привер на превьюшке из анонса

$renderImage = CFile::ResizeImageGet($arElement["PREVIEW_PICTURE"], Array("width" => 114, "height" => 114), BX_RESIZE_IMAGE_EXACT, false);
echo '<img title="'.$arElement["NAME"].'" alt="'.$arElement["NAME"].'" src="'.$renderImage["src"].'" />';

Выпадающее меню на wordpress

Реализовать выпадающее меню на wordpress довольно таки просто. Я буду показывать как реализовано на моем блоге. Блог сверстан на html5.

В файл header.php оформляем меню в соответствующем виде

<nav id="nav">
    <ul>
        <li>
            <a href="<?php echo home_url() ?>" rel="home"><?php echo __('Home') ?></a>
        </li>
        <?php wp_list_pages('title_li=') ?>
        <li class="rss">
            <a href="<?php bloginfo('rss_url') ?>" rel="alternate"><?php echo __('RSS') ?></a>
        </li>
    </ul>
</nav>

В style.css добавляем стили для меню

/* НАВИГАЦИЯ */
#nav {
    float: right;
    margin-top: 1em
}
    #nav ul {
    }
        #nav ul a:hover{
            color:#333;
        }
        #nav ul li {
            list-style: none;
            float:left;
        }
            #nav ul li a {
                display: block;
                text-decoration: none;
                margin:0 10px;
                letter-spacing: 0.2em;
            }
                #nav ul .children {
                    display:none;
                    margin: 0;
                    padding: 0;
                    position: absolute;
                    border-left:1px solid #DFDFDF;
                    border-right:1px solid #DFDFDF;
                    background:url(/wp-content/themes/ghostwriter/images/bg-body.png) no-repeat;
                }
                    #nav ul .children li{
                        float: none;
                        display: inline;
                    }
        #nav .rss {
        }
        #nav .rss a {
            display: block;
            background: url(images/icon_rss.png) no-repeat 100% 50%;
            padding-right: 22px
        }

В head страницы добавляем обработку меню на jQuery

<script type='text/javascript' src='http://yandex.st/jquery/1.5.2/jquery.js'></script>
<script type="text/javascript">
    jQuery(document).ready(function(){
        jQuery("#nav li").hover(
            function(){
                jQuery(this).find('ul').show('slow');
            },
            function(){
                jQuery(this).find('ul').hide();
            }
        );
    });
</script>


Динамический фильтр по свойству bitrix

Имеем информационный блог в котором определёно свойство-список «Производитель» со списком всех производителей продукций публикуемой в каталоге. На сайт подключаем компонент каталог и к нему прикрепляем наш информационный блок. В настройках выставляем в блоке «Настройки фильтра» в графе «Свойства:» пункт «Производитель». После сохранения у нас должна появиться страница с выводом каталога. При переходе в какую либо категории каталога появляется фильтр со списком наших производителей. Как известно в списке фильтрации будут присутствовать все производители которые есть в свойстве информационного блока, но зачем мне весь список производителей если на странице три продукта двух производителей. Ну конечно же незачем.

Задача:
доработайте окно выбора производителя, чтобы в выпадающем списке выводились только те производители, продукция которых присутствует на данной странице, с данными условиями поиска.

Решение:
В комплексном компоненте в инклуде компонента фильтра добавляем еще один элемент в котором будет храниться идентификатор раздела в котором находиться данный пользователь. В моем случае он называется «CN». Далее открываем на редактирование шаблон фильтрации предварительно скопировав его себе в шаблон или удобное Вам место. В нем я заменил содержимое элемента таблицы


#PHP CODE#
$rsItems = CIBlockElement::GetList(
	false,
	array(
		"IBLOCK_TYPE"=>$arParams["IBLOCK_TYPE"],
		"IBLOCK_ID"=>$arParams["IBLOCK_ID"],
		"IBLOCK_LID"=>SITE_ID,
		"ACTIVE"=>"Y",
		"SECTION_ID"=>$arParams["CN"],
	),
	array("PROPERTY_COMPANY"),
	false,
	array(
		"ID",
		"NAME",
		"PROPERTY_COMPANY",
	)
);
echo '<select name="arrFilter_pf[COMPANY]"><option value="">(все)</option>';
while($arItem = $rsItems->GetNext()){
	echo '<option value="'.$arItem['PROPERTY_COMPANY_ENUM_ID'].'">'.$arItem['PROPERTY_COMPANY_VALUE'].'</option>';
}
echo '</select>';

Вот так вот у меня теперь на страницы категории выводиться в список только те производители чей товар присутствует на странице.

PHP — нанесение рамки на изображение

По работе понадобилось нанести на все изображения сайта рамку. А так как на работе у меня windows 7 а не мак и из за большого объема изображений было решено накатать скриптик на php для реализации данной задачи.

#PHP#

$var_jpg = 80;
function save_img($i,$p,$r='')
{
	global $var_jpg;
	if($r=='gif')imagegif($i,$p.$r);
	elseif($r=='png')imagepng($i,$p.$r);
	else imagejpeg($i,$p.($r='jpg'),$var_jpg);
	return $r;
}
	function get_files($dir = "images"){
	$files = array();
	if ($handle = opendir($dir)) {
		while (false !== ($item = readdir($handle))) {
			if (is_file("$dir/$item")) {
				$files[] = "$dir/$item";
				$name_file_item = array_shift(explode(".", "$dir/$item")).".";
				$i=@imagecreatefromstring(file_get_contents("$dir/$item"));
				$img_color = imagecolorexactalpha($i, 250, 250, 250, 30);
				imagesetthickness($i, 10);
				$x = imagesx($i);
				$y = imagesy($i);
				imageline($i, 0, 0, 0, $y, $img_color);
				imageline($i, 5, 0, $x-6, 0, $img_color);
				imageline($i, $x-6, $y, 5, $y, $img_color);
				imageline($i, $x, $y, $x, 0, $img_color);
				save_img($i,$name_file_item,$r='');
			}
			elseif (is_dir("$dir/$item") && ($item != ".") && ($item != "..")){
				$files = array_merge($files, get_files("$dir/$item"));
			}
		}
		closedir($handle);
	}
	return $files;
}
get_files();

Сертификация 1c-bitrix

До сегодняшнего дня я уже имел три сертификата 1c-bitrix «Администрирование системы». И как то не обращал на них внимание, так как с битриксом в плотную не работал. И с тем фактом, что сейчас с данной системой работаю очень часто я возобновил получение сертификатов. Сегодня получил очередные сертификаты «Контент-менеджер» и «Многосайтовость» с чем я себя и поздравляю. По планам до конца недели сделать еще парочку сертификатов и так же восстановить свои сертификаты от «Специалиста».

Мои сертификаты можно посмотреть в соответствующем разделе

Продление жизни демки bitrix

За контроль демки отвечают хэшированные значения дат в базе данных и в одном из фалов.
1. Ставим на локалке новый битрикс
2. Вытаскиваем из таблицы b_option

NAME=>admin_passwordh VALUE=>FVkQfGYUBgYtCUVcBhcECgsTAQ==


Вот как раз вот это значение VALUE ставим в действующий битрикс.
3. В файле /bitrix/modules/main/admin/define.php

define("TEMPORARY_CACHE", "ARtsfwYHb2MMdAgebRtkG2sA");


забираем хэш и ставим нужный битрикс.
4. Очищаем /bitrix/managed_cache/
Все. Теперь демка продлилась на соответствующий срок.

Век учись и все такое…

Сколько лет уже пищу для web, а только седня узнал что в php млин прокатывают такие переменные $tдyte… Верно говориться век живи век учись… Даже стыдно=))

Месяц PHP

Для себя я объявляю этот месяц переучиванию php. Последние пол года я потратил на изучения python и достигнув нужного результата решил двигаться дальше. На php я не профи и поэтому в желании им стать сажусь в доскональное изучение. Так сказать хочу стать очередным нариком php.