+5.68
Рейтинг
20.89
Сила

Александр Фатеев

Типизация параметров в своей сущности

Здравствуйте, вопрос в следующем
Пишу плагин который реализует новую сущьность и в пунктах добавления\обновления модуля пишу тип сущьности:

public function UpdateMyEntity(ModuleMyModule_EntityMyEntity $oMyEntity) {
    ..........
    $res = $this->oMapper->UpdateMyEntity($oMyEntity);
}

Теперь пишу функцию маппера:

public function UpdateMyEntity(ModuleMyModule_EntityMyEntity $oMyEntity) {
    ...........
}


Теперь проблема. Если я вызываю делаю в Action-е вызов:

    $blogcat = Engine::GetEntity('MyModule_MyEntity');
    $blogcat->setParentId(1);
    $blogcat->setTitle('Kukuku_child');
    $blogcat->setDesc('Kukuku_child');
    $this->Blogcats_UpdateMyEntity($blogcat);

то выскакивает ошибка:
Catchable fatal error: Argument 1 passed to PluginMyPlugin_ModuleMyModule::UpdateMyEntityt() must be an instance of ModuleMyModule_EntityMyEntity, instance of PluginMyPlugin_ModuleMyModule_EntityMyEntity
т.е. Оно не хочет воспринимать мой тип Entity правильно, хотя в aInherits оно выставлено вроде бы
правильною:

    protected $aInherits=array(
        'entity' => array('ModuleMyModule_EntityMyEntity' => '_ModuleMyModule_EntityMyEntity'),
        'mapper' => array('ModuleMyModule_MapperMyEntity' => '_ModuleMyModule_MapperMyEntity'),
        'module' => array('ModuleMyModule' => '_ModuleMyModule'),
    );

Производительность LS

Добрый день.
Я наконец то перенес сайт с дле на LS. Кое-что о производительности. Дано:
Сервер
Процессор Intel® Xeon® CPU E5620 @ 2.40GHz 2400.000 Mhz X 16
Оперативная память 16 гигов

БД 3,3 Гб
Пользователей: 262799
Блогов: 262877
Топиков: 399495
Комментариев: 928242
Запросов в секунду — до 60
Посетители онлайн — до 200 (по данным Яндекс Метрики)

На ДЛЕ не тормозило вообще
Про ЛС читаем дальше

Читать дальше →

Помечаем куски шаблонов в скомпилированой странице for 1.0.1

Такой же топик как и этот, только для версии 1.0.1

файл \engine\lib\external\Smarty\libs\sysplugins\smarty_internal_templatecompilerbase.php

Ищем функции compileTemplate, находим там строку:
$_content = $template->source->content;

и меняем на
$_content = "\n\n<!-- START {$this->template->source->filepath}-->\n".$template->source->content."\n<!-- END {$this->template->source->filepath}-->\n";


После этого рекомендую очистить кеш, чтобы шаблоны заново скомпилировались

Архитектура LS:: Мапперы

Представляю первую статью цикла статей об архитектуре livestreet, я думаю будут и продолжения. Исходные коды примера, приведенные здесь доступны на github.

1. Что такое маппер
Ну-с начнем, и начнем с того, что определим, что такое маппер? Маппер, или конкретнее Data Mapper является одним из стандартных паттернов проектирования программных средств, определенный в LS как PHP-объект наследуемый от базового, для всех мапперов класса Mapper. Основным назначением маппера является отделение логики хранения данных от бизнес-логики самого приложения. Маппер содержит методы, реализующие операции CRUD (Create-Read-Update-Delete) над одной или несколькими таблицами по «просьбе» объекта. Маппер является интерфейсом между объектами и базой данных, средством, повышающим уровень абстракции в архитектуре приложения.

Читать дальше →

Вид первого топика в списке отличный от остальных

Миниплагином вывожу в блок список топиков из определенного блога. Вид первого топика из этого списка надо сделать отличным от остальных: другие стили, поля и проч. Делаю так:

в classes/blocks/BlockAfisha.class.php пишу:

class PluginAfisha_BlockAfisha extends Block {

	public function Exec() {
		/**
		 * Получаем список топиков
		 */
		$aResultMain=$this->Topic_GetTopicsByBlogId(Config::Get('plugin.afisha.topics_blog_id'), 1,1);
		$aMainEvent = $this->Topic_GetTopicsAdditionalData($aResultMain);
		
		$aResult=$this->Topic_GetTopicsByBlogId(Config::Get('plugin.afisha.topics_blog_id'), 1,Config::Get('plugin.afisha.topics_count'));
		$aEvents = $this->Topic_GetTopicsAdditionalData($aResult);
		/**
		 * Загружаем переменные в шаблон
		 */
		$this->Viewer_Assign("aMainEvent", $aMainEvent);
		$this->Viewer_Assign("aEvents", $aEvents);
	}
	
}

Читать дальше →

Конвертафция путей в MySQL дампе для переноса на новый сервер

convert_paths.php
<?php

// старый путь
$old = '/var/www/looksochi/data/www/somesite.ru/';
// новый путь
$new = '/sites/rebirth/somesite.ru/';

// исходный дамп
$input = fopen('dump.sql','r');
// выходной файл
$output = fopen('dump_new.sql','w');

function rs($r){
    global $old, $new;
    return $r[1].( $r[2] + (strlen($new)-strlen($old)) ).$r[3];
}

while(($s = fgets($input)) !== false){

    $s = preg_replace_callback('#(s\:)(\d+)(\:\x5C"'.preg_quote($old,'#').')#ms', 'rs', $s);

    $s = str_replace($old, $new, $s);

    fwrite($output, $s);
}

fclose($input);
fclose($output);


$
php -f convert_paths.php

Плагин "Похожие топики" адаптирован для работы с LiveStreet v1.0 и темами synio & new

Хорошая новость для тех, кто ждал адаптацию плагина ;).


Напоминаю, что плагин предназначен для вывода в отдельном блоке списка похожих записей.

PS. На Кукораме с его помощью выводятся похожие рецепты cookorama.net/ru/blog/keksy-i-maffiny/maffiny-s-nektarinami_2.html (вывод кастомизирован)

Идея плагина "Расширенные теги"

Захотелось сделать что-то подобное кинопоиску. Где навигация идет по разного рода тегам.

Плагин должен
— добавлять возможность создавать группы тегов,
— определять принадлежность к разным типам топиков или блогов.
— задавать параметры валидации.

В общем в скриншотах то, что получилось.

Читать дальше →

Три новых фичи в админке (Обновлено)

Во-первых, хочу сообщить, что aceAdminPanel переходит в статус release candidate. Это значит, что новые фичи в текущую версию добавляться не будут. Еще несколько дней тестов и багфиксов, и финальный релиз пойдет в каталог.

Я знаю, что есть пара фич, которые были в прошлой версии, но не перешли пока в эту. Они будут реализованы в следующей версии.

А сейчас хочу написать про три новые маленькие, но, на мой взгляд, полезные функции, которые добавлены в админку некоторое время назад, но я про них пока не говорил.
Читать дальше →

Создание плагина. От идеи до публикации. Часть 3

Настройка типографа
Настройку типографа реализуем следующим образом: создадим файл конфигурации плагина в каталоге «config» который, в свою очередь, находиться в корне плагина и в нем проведем нехитрые опрерации по добавлению тега 'carousel' в список разрешенных jevix-ом тегов.
<?php
    $aAllowTags = Config::Get('jevix.default.cfgAllowTags');
    $aAllowTags[0][0][] = 'carousel';
    Config::Set('jevix.default.cfgAllowTags', $aAllowTags);


Читать дальше →