1) Сначала используется переменная $aTopicsId, а потом для ключа кеша — $aTopicsId, т.е. пропущена буква s. Я так понимаю, это просто опечатка. Если ее исправить, то проверка на is_array($aTopicId) будет уже не нужна, т.к. вызов метода маппера GetAllTopics() всегда вернет массив.
2) Вы сначала получаете список ID, а потом сами топики. Но кешируете только вторую часть получения данных. Думаю, лучше было б кешировать полный набор данных, чтоб уменьшить число запросов к базе. Плюс Ваш кеш не учитывает того, что данные топиков могут меняться (Ваш кеш не будет сбрасываться).
В общем, я бы код написал примерно так:
public function GetTopicsForMap() {
// Задаем фильтр для топиков
$aFilter = array(
'topic_type' => 'need_help',
);
// Создаем ключ кеша
$sCacheKey = 'topics_filter_' . serialize($aFilter);
// Если топиков в кеше нет, то получаем их
if (false === ($aTopics = $this->Cache_Get($sCacheKey))) {
// Сначала получим список ID топиков по фильтру
$aTopicsId = $this->oMapperTopic->GetAllTopics($aFilter);
// Теперь получим сами топики
$aData = $this->GetTopicsAdditionalData($aTopicsId);
// Формируем массив топиков со всеми требуемыми данными
foreach ($aData as $oTopic) {
$aTopics[$oTopic->getId()] = $oTopic;
}
/* Сохраняем массив в кеше. При этом указываем:
*
* 1) Дополнительные кеш-ключи (в нашем случае - 'topic_new' и 'topic_update')
* При добавлении/обновлении любого топика будет выполнена очистка кеша по этим ключам,
* и наш кеш тоже очистится, чтоб при следующем запросе получить новые данные
*
* 2) Время жизни кеша. Его можно указывать в виде числа (количество секунд) либо
* в виде строки задания периода, например:
* P1D - 1 день
* P1M - 1 месяц
* P2DT8H - 2 дня и 8 часов
* PT3600S - 3600 секунд
*/
$this->Cache_Set($aTopics, $sCacheKey, array('topic_new', 'topic_update'), 'P1D');
}
// Возвращаем массив топиков
return $aTopics;
}
Честно скажу — не вникал в детали, какие опции там есть и как что там можно поднастроить, используется все практически по умолчанию. Если кто-то возьмет на себя труд изучить и выработать рекомендации/советы по тонкой настройке — будет классно ;)
Сейчас эта кнопочка осталась, просто потому, что она там всегда была. Но вообще изначально смысл ее такой: указать, какое фото будет использоваться в качестве превью топика.
Превью топика (мне вообще-то сам это термин не нравится, но другого я не знаю) используется для вывода изображения либо в ленте топиков, либо (что чаще) в шаблонах, где заголовки топиков располагаются «плиткой».
Сейчас нет какого-то четкого правила, что брать в качестве превью, поэтому разные разработчики решают эту задачу на уровне плагинов/шаблонов. Хотя можно как-то упорядочить это на уровне движка.
Например, в качестве «превью» по умолчанию можно брать либо первое же изображение из тела топика, либо (если в теле изображений нет, но есть фотосет) первое фото из фотосета, либо фото, которое отмечено в фотосете.
Да, такого функционала нет. И да, он, разумеется, нужен и будет в будущих версиях.
Если нужно вот прямо сейчас, то, как показала практика, лучше обращаться напрямую к потенциальным исполнителям, которых можно найти здесь: altocms.ru/freelancers/
Потому что: а) этот модуль никогда не работал, как надо; б) в Альто он вообще стал бесполезным рудиментом.
В будущем будут в движке дополнительные средства для профилирования особо узких мест, но пока для этого предлагается использовать внешние средства, например, xdebug.
Но если Вы толком не знаете, что такое «профилирование php-скриптов» и зачем оно нужно, то лучше отключить все, что с этим связано, и не брать в голову.
Т.е. в качестве превью выводился «кроп» размером 50x50 (т.к. в метод getWebPath передан параметр '50crop'), а для просмотра изображения использовался квадрат стороной 1000 пикселов (вызов getWebPath(1000)).
Этот же кусок кода в новой версии (в упрощенном виде):
Здесь вместо '50crop' используется 'x100' (т.е. вместо квадрата — изображение с высотой 100 пикселей с автошириной), и убираем параметр 1000, чтобы тоже избавиться от квадрата при просмотре.
Кажется, Вы не поняли — раньше изображения фотосета имели очень ограниченный набор параметров для изменения размеров. Сейчас поддерживается полный набор параметров, описанный здесь: altocms.ru/blog/dev/420.html И плюс еще вариант — задание высоты с автоопределением ширины.
Если у Вас в шаблоне стоит href="{$oPhoto->getUrl(1000)}", то да, будут создаваться квадратные изображения (это равнозначно параметру «1000x1000»).
Если менять размер вообще не нужно, то укажите метод безе параметров: href="{$oPhoto->getUrl()}".
Если нужно вписать в какие-то определенные размеры (но без фона), то укажите их: href="{$oPhoto->getUrl('800x600')}".
Нужно задать только высоту? Тогда так: href="{$oPhoto->getUrl('x600')}" (а ширина определится автоматом).
Т.е. параметр 'x100' говорит о том, что нужно фото из фотосета подогнать по высоте в 100px, а ширина будет пропорциональной. Например (ширина x высота):
было 200x200 — стало 100x100
было 200x400 — стало 50x100
было 400x200 — стало 200x100
Вариантов много:
1) В самом php-коде error_reporting(0); отключает вывод ошибок
2) Можно в .htaccess их отключить
3) Можно в php.ini это сделать
Уверен, фраза «как отключить вывод ошибок php» в поисковике выдаст подробные инструкции.
Но хотелось бы понять, что за ошибки у Вас лезут и в каком месте. Это какие-то баги движка или Ваши собственные эксперименты?
1) Сначала используется переменная $aTopicsId, а потом для ключа кеша — $aTopicsId, т.е. пропущена буква s. Я так понимаю, это просто опечатка. Если ее исправить, то проверка на is_array($aTopicId) будет уже не нужна, т.к. вызов метода маппера GetAllTopics() всегда вернет массив.
2) Вы сначала получаете список ID, а потом сами топики. Но кешируете только вторую часть получения данных. Думаю, лучше было б кешировать полный набор данных, чтоб уменьшить число запросов к базе. Плюс Ваш кеш не учитывает того, что данные топиков могут меняться (Ваш кеш не будет сбрасываться).
В общем, я бы код написал примерно так:
www.no-margin-for-errors.com/projects/prettyphoto-jquery-lightbox-clone/
Честно скажу — не вникал в детали, какие опции там есть и как что там можно поднастроить, используется все практически по умолчанию. Если кто-то возьмет на себя труд изучить и выработать рекомендации/советы по тонкой настройке — будет классно ;)
Превью топика (мне вообще-то сам это термин не нравится, но другого я не знаю) используется для вывода изображения либо в ленте топиков, либо (что чаще) в шаблонах, где заголовки топиков располагаются «плиткой».
Сейчас нет какого-то четкого правила, что брать в качестве превью, поэтому разные разработчики решают эту задачу на уровне плагинов/шаблонов. Хотя можно как-то упорядочить это на уровне движка.
Например, в качестве «превью» по умолчанию можно брать либо первое же изображение из тела топика, либо (если в теле изображений нет, но есть фотосет) первое фото из фотосета, либо фото, которое отмечено в фотосете.
demo.altocms.ru/start-kit/6.html
demo.altocms.ru/start-kit/7.html
Если нужно вот прямо сейчас, то, как показала практика, лучше обращаться напрямую к потенциальным исполнителям, которых можно найти здесь: altocms.ru/freelancers/
В будущем будут в движке дополнительные средства для профилирования особо узких мест, но пока для этого предлагается использовать внешние средства, например, xdebug.
Но если Вы толком не знаете, что такое «профилирование php-скриптов» и зачем оно нужно, то лучше отключить все, что с этим связано, и не брать в голову.
Т.е. в качестве превью выводился «кроп» размером 50x50 (т.к. в метод getWebPath передан параметр '50crop'), а для просмотра изображения использовался квадрат стороной 1000 пикселов (вызов getWebPath(1000)).
Этот же кусок кода в новой версии (в упрощенном виде):
Здесь вместо '50crop' используется 'x100' (т.е. вместо квадрата — изображение с высотой 100 пикселей с автошириной), и убираем параметр 1000, чтобы тоже избавиться от квадрата при просмотре.
Если у Вас в шаблоне стоит href="{$oPhoto->getUrl(1000)}", то да, будут создаваться квадратные изображения (это равнозначно параметру «1000x1000»).
Если менять размер вообще не нужно, то укажите метод безе параметров: href="{$oPhoto->getUrl()}".
Если нужно вписать в какие-то определенные размеры (но без фона), то укажите их: href="{$oPhoto->getUrl('800x600')}".
Нужно задать только высоту? Тогда так: href="{$oPhoto->getUrl('x600')}" (а ширина определится автоматом).
Т.е. параметр 'x100' говорит о том, что нужно фото из фотосета подогнать по высоте в 100px, а ширина будет пропорциональной. Например (ширина x высота):
было 200x200 — стало 100x100
было 200x400 — стало 50x100
было 400x200 — стало 200x100
В итоге получается вот так:
1) В самом php-коде error_reporting(0); отключает вывод ошибок
2) Можно в .htaccess их отключить
3) Можно в php.ini это сделать
Уверен, фраза «как отключить вывод ошибок php» в поисковике выдаст подробные инструкции.
Но хотелось бы понять, что за ошибки у Вас лезут и в каком месте. Это какие-то баги движка или Ваши собственные эксперименты?