18 марта 2017 г. 16:24:19
<?php
$src = '/home/www/image.jpg'; // путь с исходному изображению
$src_w = 200; // ширина вырезамемой части исходного изображения
$src_h = 200; // выста вырезамемой части исходного изображения
// если нам нужно вырезать часть изображения то всегда координаты для результирующего изображения x:0 и y:0
$dst_x = 0; // x-координата результирующего изображения
$dst_y = 0; // y-координата результирующего изображения
$new_src = '/home/www/new_image.jpg'; // путь к результирующему изображению
// Создание изображения
$src_im = imagecreatefromjpeg($src);
if ($src_im)
{
// Создание результирующего изображения с заданной шириной и высотой черного цвета, в нашем случае равно ширине и высоте вырезаемой части
$dst_im = imagecreatetruecolor($src_w, $src_h);
// кординаты части исходного изображения откуда вырезаем, например по середине, все координаты считаются с верхнего левого угла
$src_x = 300; // ширина исходного изображения 800, делим пополам и вычитаем ширину результирующего изображения 200 делимое тоже пополам (800/2 - 200/2 = 300)
$src_y = 100; // высота исходного изображения 400, делим пополам и вычитаем высоту результирующего изображения 200 делимое тоже пополам (400/2 - 200/2 = 100)
// Копирование части изображения
imagecopy($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h);
// Создаем изображении и сохраняем по указанному пути с качеством 100 (диапазон качества может быть от 0 до 100)
imagejpeg($dst_im, $new_src, 100);
// На всякий случай изменяем режим доступа к файлу
chmod($new_src, 0644);
// освобождаем память
imagedestroy($dst_im);
}
?>
...
Читать дальше →
php, GD
19 июля 2016 г. 11:02:21
Есть странность, при копировании интернет-магазина в HostCMS, происходит только копирование его настроек, доставок, платежных систем, цен итд, но не его групп и товаров, так что для этого мы можем использовать следующий код:
<?php
$oShopOne = Core_Entity::factory('Shop', 1); // магазин откуда копируем
$oShopTwo = Core_Entity::factory('Shop', 2); // магазин куда копируем
$oShop_Groups = $oShopOne->Shop_Groups;
$oShop_Groups->queryBuilder()->where('parent_id','=',0); // выбираем все группы из корня
$aShop_Groups = $oShop_Groups->findAll(FALSE);
Core_Event::attach('shop_group.onBeforeCopy', array('Shop_Copy_Observer', 'onBeforeCopy'));
Core_Event::attach('shop_item.onBeforeCopy', array('Shop_Copy_Observer', 'onBeforeCopy'));
foreach($aShop_Groups as $oShop_Group)
{
$oShop_Group->copy();
}
$oShopTwo->recount(); // пересчитываем магазин
class Shop_Copy_Observer
{
public static function onBeforeCopy($newObject, $athis)
{
$newObject->shop_id = 2; // ID магазина куда копируем
}
}
?>
...
Читать дальше →
shop_items, хуки, core_event, php, hostcms6, shop, shop_groups
1 комментарий
18 июля 2016 г. 14:19:09
В ТДС в самом начеле доабвляем следующий код
Код для Интернет-магазина:
class My_Shop_Controller_Show extends Shop_Controller_Show
{
protected function _groupCondition()
{
$oShop = $this->getEntity();
if ($this->group)
{
// если ID группы не 0, т.е. не корневая группа
// получаем подгруппы
$aSubGroupsID = $this->fillShopGroup($oShop->id, $this->group); // добавляем текущую группу в массив
$aSubGroupsID[] = $this->group;
$this->shopItems()
->queryBuilder()
->where('shop_items.shop_group_id', 'IN', $aSubGroupsID); // получаем все товары из подгрупп
}
else
{
$this->shopItems()
->queryBuilder()
->where('shop_items.shop_group_id', '=', 0);
}
return $this;
}
protected $_aGroupTree = array();
public function fillShopGroup($iShopId, $iShopGroupParentId = 0, $iLevel = 0)
{
$iShopId = intval($iShopId);
$iShopGroupParentId = intval($iShopGroupParentId);
$iLevel = intval($iLevel);
if ($iLevel == 0)
{
$aTmp = Core_QueryBuilder::select('id', 'parent_id')
->from('shop_groups')
->where('shop_id', '=', $iShopId)
->where('deleted', '=', 0)
->execute()->asAssoc()->result();
foreach ($aTmp as $aGroup)
{
$this->_aGroupTree[$aGroup['parent_id']][] = $aGroup;
}
}
$aReturn = array();
if (isset($this->_aGroupTree[$iShopGroupParentId]))
{
foreach ($this->_aGroupTree[$iShopGroupParentId] as $childrenGroup)
{
$aReturn[] = $childrenGroup['id'];
$aReturn = array_merge($aReturn, $this->fillShopGroup($iShopId, $childrenGroup['id'], $iLevel + 1));
}
}
$iLevel == 0 && $this->_aGroupTree = array();
return $aReturn;
}
}
Далее ищем и меняем строчку:
// ищем
//$Shop_Controller_Show = new Shop_Controller_Show($oShop);
// меняем на
$Shop_Controller_Show = new My_Shop_Controller_Show($oShop);
Код для Информационной системы:
...
Читать дальше →
informationsystem_groups, php, hostcms6, shop, shop_groups, shop_items, informationsystem_items
14 июня 2016 г. 00:19:25
Создаем файл /modules/admin/form/action/controller/type/edit/observer.php
со следующим содержимым:
<?php
/* Добавление/скрытие полей форм ЦА HostCMS v6 */
defined('HOSTCMS') || exit('HostCMS: access denied.');
class Admin_Form_Action_Controller_Type_Edit_Observer
{
// либо public static function onAfterRedeclaredPrepareForm($controller, $args)
// Генерация стандартной формы редактирования осуществляется методом _prepareForm() контроллера Admin_Form_Action_Controller_Type_Edit. Далее в методе класса потомка, например Shop_Controller_Edit, осуществляется перемещение полей по вкладкам и для корректировки уже этого перемещения необходимо использовать событие Admin_Form_Action_Controller_Type_Edit.onAfterRedeclaredPrepareForm.
public static function onBeforeExecute($controller, $args)
{
list($operation, $Admin_Form_Controller) = $args;
if(is_null($operation))
{
// Данное событие будет вызываться для всех форм, определяем с каким контроллером работаем
switch(get_class($controller))
{
// Редактирование информационной системы
case 'Informationsystem_Controller_Edit':
// Получаем доступ к вкладке "Основные"
$mainTab = $controller->getTab('main');
// Если вдруг мы добавили новый столбец 'sign' в БД то система будет ругаться "Key 'sign' in 'ru' language does not exist for model 'informationsystem'."
// Конечно же в файл /modules/informationsystem/i18n/ru.php мы ничего внести не может, как оказалось он затирается, для этого делаем следующее
$controller->getField('sign')->caption("Подпись");
// Удаляем поле "Сортировка" с вкладки "Основные"
$mainTab->delete($controller->getField('sorting'));
// Добавляем произвольное поле на вкладку "Основные"
// либо до/после (addBefore/addAfter) уже существующего поля
$customFiled = Admin_Form_Entity::factory('Input')->name("custom");
$mainTab->addAfter($customFiled, $controller->getField('name'));
// либо просто добавляем, в большем случае в конце
$mainTab->add($customFiled);
break;
}
}
}
}
В файле bootstrap.php
в конце добавляем следующую строчку:
// Добавление/скрытие полей форм ЦА
Core_Event::attach('Admin_Form_Action_Controller_Type_Edit.onBeforeExecute', array('Admin_Form_Action_Controller_Type_Edit_Observer', 'onBeforeExecute'));
// либо Core_Event::attach('Admin_Form_Action_Controller_Type_Edit.onAfterRedeclaredPrepareForm', array('Admin_Form_Action_Controller_Type_Edit_Observer', 'onAfterRedeclaredPrepareForm'));
// если первое не работает
...
Читать дальше →
php, core_event, hostcms6, хуки
20 апреля 2016 г. 22:08:23
Создаем файл /modules/admin/form/controller/observer.php со следующим содержимым:
<?php
/* Добавление собственного пункта меню в выпадающее меню в ЦА HostCms v6 */
defined('HOSTCMS') || exit('HostCMS: access denied.');
class Admin_Form_Controller_Observer
{
public static function onBeforeAddEntity($controller, $args)
{
list($oAdmin_Form_Entity) = $args;
if($controller->getAdminForm()->id == 65) // Интернет-магазин, товары и группы, id нужной формы можно посмотреть в Формах центра администрирования
{
if (strpos(get_class($oAdmin_Form_Entity), 'Admin_Form_Entity_Menus') !== FALSE)
{
$aChildren = $oAdmin_Form_Entity->getChildren();
$sProperties = '/admin/shop/item/import/mymenu/index.php';
$oShop = Core_Entity::factory('Shop', Core_Array::getGet('shop_id', 0));
$oShopGroup = Core_Entity::factory('Shop_Group', Core_Array::getGet('shop_group_id', 0));
$additionalParams = "shop_id={$oShop->id}&shop_group_id={$oShopGroup->id}";
// удаление пункта меню с индексом 5 или шестой по счету
//$aChildren[0]->deleteChild(5);
// Добавляем потомка первому элементу меню
$aChildren[0]->add(
Admin_Form_Entity::factory('Menu')
->name('Мое меню')
->icon('fa fa-download icon-separator')
->href($controller->getAdminLoadHref($sProperties, NULL, NULL, $additionalParams))
->onclick($controller->getAdminLoadAjax($sProperties, NULL, NULL, $additionalParams))
);
}
}
}
}
В файле bootstrap.php в конце добавляем следующую строчку:
// Добавление собственного пункта меню в выпадающее меню в ЦА
Core_Event::attach('Admin_Form_Controller.onBeforeAddEntity', array('Admin_Form_Controller_Observer', 'onBeforeAddEntity'));
...
Читать дальше →
php, hostcms6, хуки, core_event
1 комментарий
22 марта 2016 г. 20:21:15
Иногда нужно вывести массив на станице сайта чтобы что то посмотреть, вывести его читабельным, но не хочется чтобы всю эту простыню видели обычные пользователи сайта, то делаем так:
HostCMS v6
<?php
echo("<pre>");
Core_Auth::logged() && print_r($asArray); //$aArray - ваш массив данных
echo("</pre>");
?>
или так:
<?php
if(Core_Auth::logged())
{
echo("<pre>");
print_r($asArray); //$aArray - ваш массив данных
echo("</pre>");
}
?>
HostCMS v5
<?php
$kernel = & singleton('kernel');
$result = $kernel->GetCurrentUser();
echo("<pre>");
$result && print_r($asArray); //$aArray - ваш массив данных
echo("</pre>");
?>
или так:
<?php
$kernel = & singleton('kernel');
$result = $kernel->GetCurrentUser();
if($result)
{
echo("<pre>");
print_r($asArray); //$aArray - ваш массив данных
echo("</pre>");
}
?>
...
Читать дальше →
hostcms5, php, hostcms6, core_auth
07 января 2016 г. 19:51:58
В ТДС "Поиск" в код страницы добавляем к $Search_Controller_Show следующий параметр modules(), должно получится так:
<?php
...
$Search_Controller_Show
->limit(Core_Page::instance()->libParams['itemsOnPage'])
->parseUrl()
->len(Core_Page::instance()->libParams['maxlen'])
->query(Core_Array::getGet('text'))
->structure(Core_Page::instance()->structure)
->modules(
array(
3 => array(
array('module_id' => 1, 'module_value_type' => 2)
)
)
);
...
?>
Где:
3 - модуль интернет-магазин;
module_id - ID интернет-магазина;
module_value_type - 1 это группа, 2 это элемент (или товар)
...
Читать дальше →
search, hostcms6, php
08 декабря 2015 г. 18:13:06
Созадем файл например observer.php в папке modules/shop/item/ со следующим содержанием:
<?php
defined('HOSTCMS') || exit('HostCMS: access denied.');
class Shop_Item_Observer
{
static public function onBeforeRedeclaredGetXml($object)
{
$oPricesOtherCurrencies = Core::factory('Core_Xml_Entity')->name('prices_other');
$oShop = $object->Shop;
$aShopCurrencies = Core_Entity::factory('Shop_Currency')->findAll();
foreach ($aShopCurrencies as $oShopCurrency)
{
$fCurrencyCoefficient = $object->shop_currency_id > 0 && $oShopCurrency->id > 0
? Shop_Controller::instance()->getCurrencyCoefficientInShopCurrency($object->Shop_Currency, $oShopCurrency)
: 0
;
$oShop_Item_Controller = new Shop_Item_Controller();
$price = $oShop_Item_Controller->getPrice($object);
$oPricesOtherCurrencies->addEntity(
Core::factory('Core_Xml_Entity')
->name('price')
->addEntity(
Core::factory('Core_Xml_Entity')
->name('value')
->value(Shop_Controller::instance()->round($price * $fCurrencyCoefficient))
)
->addEntity($oShopCurrency)
);
}
$object->addEntity($oPricesOtherCurrencies);
}
}
?>
...
Читать дальше →
hostcms6, php, shop_items, хуки
03 ноября 2015 г. 17:33:17
Смотрим что у нас находится в $_SERVER, распечатываем массив через print_r():
<?php
print_r($_SERVER);
?>
Вот некоторые полезные ключи, которые могут понадобиться:
<?php
echo $_SERVER['REMOTE_ADDR']; // выводит IP-адрес, с которого пользователь просматривает текущую страницу.
echo $_SERVER['HTTP_REFERER']; // выводит адрес страницы (если есть), которая привела браузер пользователя на эту страницу. Этот заголовок устанавливается веб-браузером пользователя. Не все браузеры устанавливают его и некоторые в качестве дополнительной возможности позволяют изменять содержимое заголовка HTTP_REFERER. Одним словом, в самом деле ему нельзя доверять.
echo $_SERVER['HTTP_USER_AGENT']; // выводит содержимое заголовка User-Agent: из текущего запроса, если он есть. Эта строка содержит обозначение браузера, которым пользователь запросил данную страницу. Типичным примером является строка: Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586).
echo $_SERVER['DOCUMENT_ROOT']; // выводит директорию от корня до директории которой выполняется текущий скрипт, в точности та, которая указана в конфигурационном файле сервера.
?>
Все тоже самое на HostCMS v6:
<?php
echo Core_Array::get($_SERVER, 'REMOTE_ADDR', '127.0.0.1');
echo Core_Array::get($_SERVER, 'HTTP_REFERER');
echo Core_Array::get($_SERVER, 'HTTP_USER_AGENT');
echo Core_Array::get($_SERVER, 'DOCUMENT_ROOT');
?>
Core_Array::get($array, $key, $defaultValue), где:
$array - массив данных
$key - ключ
$defaultValue - значение по умолчанию, если вернет NULL, необязательный параметр
...
Читать дальше →
hostcms6, php, $_SERVER
22 октября 2015 г. 20:01:14
Вывести документ в любом месте верстки/макета с ID = 11:
<?php
Core_Entity::factory('Document', 11)->Document_Versions->getCurrent()->execute();
?>
Иногда нужно, чтобы название текущего документа выводилось в заголовке h1, в произвольном месте макета, не перед текстом. Делаем так:
<?php
// ID текущего узла струкутры
$structure_id = CURRENT_STRUCTURE_ID;
$oStructure = Core_Entity::factory('Structure', $structure_id);
if ($oStructure->document_id)
{
$oDocument = $oStructure->Document;
echo '<h1>' . htmlspecialchars($oDocument->name) . '</h1>';
}
?>
А вот так можно показать, пользователя который создал/редактировал текущую версию документа:
<?php
// ID текущего узла струкутры
$structure_id = CURRENT_STRUCTURE_ID;
$oStructure = Core_Entity::factory('Structure', $structure_id);
if ($oStructure->document_id)
{
$oUser = $oStructure->Document->Document_Versions->getCurrent()->User;
echo '<h1>' . htmlspecialchars($oUser->name) . '</h1>';
}
?>
...
Читать дальше →
document, php, hostcms6
2 комментария