Наверное, вам лучше вообще разделить вывод блогов по типам, раз уж у вас для них планируется отдельное оформление. Можно сделать так:
— блог (его шапка и список топиков) выводится шаблоном «tpls/actions/blog/action.blog.blog.tpl» — переименуйте его в action.blog.one.tpl;
— скопируйте этот же файл, но с соответствующими именами для разных типов блога, в вашем случае: action.blog.two.tpl, action.blog.open.tpl, action.blog.close.tpl, action.blog.personal.tpl
— создайте файл (action.blog.blog.tpl) шаблона в котором будет выбираться нужный тип шаблона с единственной строчкой:
То есть, шаблон блога будет подключать файл блога нужного типа. Теперь, имея различные шаблоны для блогов различного типа, внутри этого шаблона выводите нужные блоки, нужную верстку и т.д.
В каком виде галерея может быть реализована в Alto? Способов несколько, но наиболее правильным, с моей точки зрения, будет реализовать его в виде отдельного типа топика. Топик-фотоальбом.
Такой тип топика будет иметь в качестве базовых полей:
— наименование;
— описание (здесь можно поступить по-разному: разрешить форматирование и картинки в тексте описания или запретить. Здесь же может возникнуть непонимание пользователя относительно того, что картинки можно добавлять в описание и в фотосет);
— собственно, сам фотосет;
— теги;
— опрос, если владелец захотел узнать, например, понравились ли другим фотографии;
То есть я подвожу к такой мысли, что базовый функционал для организации фотоальбома уже есть и сделать фотоальбом можно легко через админку.
Что касается другого функционала, то его придется дописывать, но с учетом уже готовых функций из коробки выглядеть всё будет так:
1. Видимость альбома: Создаются типы блогов: «закрытые альбомы», «открытые альбомы», «альбомы только для друзей». Каждому пользователю при регистрации автоматически создаются по одному экземпляру каждого блога. Ка сейчас персональный, но добавляются: «Персональные закрытые альбомы», «Персональные открытые альбомы», «Персональные альбомы для друзей». пользователь создавая альбом относит его в один из этих своих типов блогов тем самым регулируя их видимость. Поскольку альбом это топик, то его легко перенести в любой другой блог.
2. Наборы альбомов: Пользователь может создавать свои наборы альбомов (блогов типа «Альбомы»), например, «Фото природы для друзей»
3. Коллективные наборы альбомов: Пользователи могут делать коллективные «фото-наборы» (коллективный блог) размещая в них свои тематические фотографии
4. Лучшие фото: Механизм реализации следующий: В БД к записи голоса добавляется поле – id_foto, которое хранит голос за фотографию. Общее количество голосов будут показывать рейтинг всего альбома.
5. Просматриваемые фото и комментарии к фото: аналогично, внеся изменения в БД, можно разделить в рамках одного топика (альбома) комментарии к каждой фото и просмотр каждой фото.
6. Виджеты с фото, альбомы в профиле и т.д. Так как альбом – это топик, то выборка различных данных по топику сложности не представляет и этот функционал еть в движке.
7. Вывод альбомов отдельным списком: Сейчас Alto выводит персональные и коллективные блоги на отельных страницах, добавить новое условие на вывод какого-либо другого типа топика, например «открытые альбомы пользователя» не сложно, функционал в движке уже есть. Также есть экшен «ActionFilter», который выводит отдельный вид контента на странице.
8. Фотосет: фотосет сейчас довольно хорошо выполняет функции захгрузки фото, но его можно дополнить другими функциями: порядок фото, пометка человека на фото и т.д.
Вот в краце, как интегрировать функционал альбома с уже существующим функционалом Alto.
Если что-то забыл – пишите, дополню список.
В последней стабильной версии 1.0.6 это делается примерно так:
$iPhotoId = $oTopic->getPhotosetMainPhotoId();
$aPhotos = $oTopic->getPhotosetPhotos($iPhotoId, 1);
if (isset($aPhotos[$iPhotoId])) {
$oPhoto = $aPhotos[$iPhotoId];
// Здесь в $oPhoto оно и есть
}
В текущей разрабатываемой версии 1.0.7 так:
$oPhoto = $oTopic->getPhotosetMainPhoto();
В обоих случаях в результате в переменной $oPhoto получим фотографию, отмеченную как превью, в виде объекта ModuleTopic_EntityTopicPhoto. И получить ссылку на само изображение можно методом getUrl():
Его, даже делать не нужно:
— Идем сюда https://ulogin.ru/constructor.php
— Берем плагин для Livestreet
— На всякий случай здесь common/plugins/ulogin/classes/hooks/HookUloginWidget.class.php ставим <?php вместо <?
— В файле common/plugins/ulogin/classes/actions/ActionUlogin.class.php меняем $this->User_DeleteFoto($oUser) на $this->User_DeletePhoto($oUser) и $this->UploadFoto($photo_big,$oUser) на $this->UploadPhoto($photo_big,$oUser)
— Радуемся
Подтверждаю.
Перенес базу сначала обновив LS 0.4.2->0.5.1->1.0.3
А затем установив alto, поставив галочку о конвертации.
Хотел бы указать ряд моментов, мне пригодились:
1. Смотрите внимательно при переносе базы. Первый раз получил после установки в некоторых местах fatal error, некоторые топики отсутствовали. Причина была проста-база обширная (свыше 70 мб, 5500 пользователей 11 тыр комментариев) и при ее сжатии через phpadmin файл не докачался. Повторил все еще раз — ошибок больше нет.
2.Если будете ставить на другой домен или поддомен (например для тестирования или настройки) — обратите внимание, что аватары и рисунки в профиле в базе сохраняются с полным путем, вида site.com/uploads/images/00/00/4.jpg.
При этом при работе на другом поддомене или домене аватары показываться будут, но везде в штатном размере 100х100, функция их уменьшенного показа $oUser->getAvatarUrl(24) (в комментариях, прямом эфире и т.д.)работать не будет.
Нужно обязательно прописать новый путь к аватарам вида newsite.com/uploads/images/00/00/4.jpg.
Обновить все легко в phpmyadmin, например так:
UPDATE `prefix_user` SET
`user_profile_avatar` = REPLACE(`user_profile_avatar`, 'http://site.com/uploads/images/', 'http://newsite.com/uploads/images/');
После переноса сохранились все топики, блоги, статичные страницы, юзеры, их связи, переписка.
Естественно, не сохранились плагины от старых версий LS. Особо они не нужны, но для меня актуально прикрепление файлов к топику. К сожалению, в коробке alto такое не умеет, в каталоге плагин такое тоже не нашел. А жаль. В свое время покупал aceBlogExtender только из-за возможности прикреплять файлы (именно прикреплять, а не создавать отдельный вид топика-файла). Нужно как-то думать как пристроить большое количество прикрепленных к топикам файлов.
altocms.ru/blog/questions/537.html#comment8900
Мой комментарий про простейший плагин, правда в контексте возможностей движка для переопределения стандартных классов, но принцип неизменен и для простого «Hello World».
Для простейшего вывода своего шаблона — просто определяем свой экшен и назначаем ему шаблон.
class PluginExample_ActionExample extends ActionPlugin {
public function Init() {
$this->SetDefaultEvent('index'); //обработчик по умолчанию
$this->SetTemplateAction('название_файла_шаблона'); //шаблон для экшена
}
protected function RegisterEvent() {//регистрируем эвент
$this->AddEvent('index','EventIndex');
}
protected function EventIndex() {//выполняем эвент
}
}
Пример плагина с подробными комментариями есть в AltoCMS 0.9.7.1 в папке /plugins/demo, в AltoCMS 1.0 /common/console/protected/plugin
Можно делать и в исходном классе, но вот представьте, вы один раз что-то поменяли, потом другой раз, а потом еще раз. и т.д. и тут, в один прекрасный день, вышла новая версия Alto, в которой добавили много интересных вещей и исправили кучу ошибок.
Что вам придется делать в этом случае? Да ничего сложного, по большому счету, просто сначала вспомнить в каких классах и что вы меняли (еще вспомнить нужно вспомнить зачем, ибо со временем это забывается), потом сохранить все эти файлы, потом обновить движок и на основе старых файлов восстановить эти изменения.
Если же переопределять функционал движка через плагины, то по крайней мере не нужно помнить что и как вы меняли, так как если переопределенный класс претерпел в ходе обновления слишком значительные изменения вы это увидите. А скорее всего вообще ничего вспоминать и менять не придется, ибо принципы обратной совместимости в Alto пока еще никто не отменял.
Теперь подробнее про переопределение.
Для примера возьмем файл /common/classes/actions/ActionBlog.class.php
он содержит
class ActionBlog extends Action {...}
в нем есть свойство которое содержит в массиве список URL с котрыми запрещено создавать блог
и нам захотелось поменять этот список (добавить или убрать каке-то ключевые слова)
Для этого сделаем простейший плагин.
в папке /common/classes/actions/plugins создадим папку example в этой папке создаем папку classes, а в ней папку actions и уже в этой папке создаем свой файл ActionBlog.class.php со следующим содержанием
Вот и все. Теперь можно идти в админку и включать наш плагин. Для тех, кто хочет сказать, что это слишком сложный путь для простого изменения отвечу: для одного изменения да, но если изменения у вас на сайте все же планируются, то проще сделать такой плагин и потом дописывать его по мере необходимости (новый плагин для каждого изменения делать не нужно!).
И напоследок — загляните в /common/console/protected/plugin/ и там вы найдете демо-плагин с подробными комментариями и полной структурой папок и файлов.
Все просто, но в тоже время и нет…
Первое правило — не трогать все, что находится в папках /engine, /common/classes и /common/classes/config
Второе правило — для любого изменения функционала — пиши плагин, ибо в плагине можно переопредилить классы движка, написать свои экшены, переопределить шаблоны и сделать почти все что угодно, кроме изменения двух системных классов (но оно вам и не понадобится)
Для более полной информации посмотрите вот это видео: youtu.be/Kq35JnRI9hk?t=14m35s
Это доклад Вадима Шемарова (aVadim ) на конференции CMS Conference 2013 — очень полезное видео.
По п.1 — с учетом функционала последней версии не составит особого труда выдавать в качестве изображения по умолчанию первую картинку топика или фотосета.
С одной стороны, это позволит не привязывать скин к какому-то конкретному плагину (типа mainpreview), и скин будет работать и без него. А с другой — если добавить специальный плагин, то можно скин заюзать более эффективно (т.е. назначать дефолтную картинку руками и индивидуально)
Верно. Если быть более точным — совпадают плагин и название виджета. Но иногда действительно нужно один и тот же виджет указать для разных случаев. Решается добавлением параметра id в описание виджетов, которые должны быть уникальными. Например, так:
Так… Работает. Но, с первого раза не вышло — ошибка (глюк) пропала, но шаблон тупо показывал на главной фиксированную ширину. Т.е. «fluid» игнорился напрочь. В чем было дело, я въехал не сразу. Оказалось все просто. Я по аналогии с Вашим советом исправил самый верхний параметр (что логично). Это:
Этим можно управлять с помощью модификатора Smarty — spellcount
Положите сюда: /engine/lib/external/Smarty/libs/plugins файл modifier.spellcount.php с таким содержимым:
LensorJuuse, решение — нужно в настройках указать — Принудительно обрабатывать CSS (Настройки сайта/CSS и javascript). В этом случае изменения в css сразу отображаются на сайте.
— блог (его шапка и список топиков) выводится шаблоном «tpls/actions/blog/action.blog.blog.tpl» — переименуйте его в action.blog.one.tpl;
— скопируйте этот же файл, но с соответствующими именами для разных типов блога, в вашем случае: action.blog.two.tpl, action.blog.open.tpl, action.blog.close.tpl, action.blog.personal.tpl
— создайте файл (action.blog.blog.tpl) шаблона в котором будет выбираться нужный тип шаблона с единственной строчкой:
То есть, шаблон блога будет подключать файл блога нужного типа. Теперь, имея различные шаблоны для блогов различного типа, внутри этого шаблона выводите нужные блоки, нужную верстку и т.д.
Такой тип топика будет иметь в качестве базовых полей:
— наименование;
— описание (здесь можно поступить по-разному: разрешить форматирование и картинки в тексте описания или запретить. Здесь же может возникнуть непонимание пользователя относительно того, что картинки можно добавлять в описание и в фотосет);
— собственно, сам фотосет;
— теги;
— опрос, если владелец захотел узнать, например, понравились ли другим фотографии;
То есть я подвожу к такой мысли, что базовый функционал для организации фотоальбома уже есть и сделать фотоальбом можно легко через админку.
Что касается другого функционала, то его придется дописывать, но с учетом уже готовых функций из коробки выглядеть всё будет так:
1. Видимость альбома: Создаются типы блогов: «закрытые альбомы», «открытые альбомы», «альбомы только для друзей». Каждому пользователю при регистрации автоматически создаются по одному экземпляру каждого блога. Ка сейчас персональный, но добавляются: «Персональные закрытые альбомы», «Персональные открытые альбомы», «Персональные альбомы для друзей». пользователь создавая альбом относит его в один из этих своих типов блогов тем самым регулируя их видимость. Поскольку альбом это топик, то его легко перенести в любой другой блог.
2. Наборы альбомов: Пользователь может создавать свои наборы альбомов (блогов типа «Альбомы»), например, «Фото природы для друзей»
3. Коллективные наборы альбомов: Пользователи могут делать коллективные «фото-наборы» (коллективный блог) размещая в них свои тематические фотографии
4. Лучшие фото: Механизм реализации следующий: В БД к записи голоса добавляется поле – id_foto, которое хранит голос за фотографию. Общее количество голосов будут показывать рейтинг всего альбома.
5. Просматриваемые фото и комментарии к фото: аналогично, внеся изменения в БД, можно разделить в рамках одного топика (альбома) комментарии к каждой фото и просмотр каждой фото.
6. Виджеты с фото, альбомы в профиле и т.д. Так как альбом – это топик, то выборка различных данных по топику сложности не представляет и этот функционал еть в движке.
7. Вывод альбомов отдельным списком: Сейчас Alto выводит персональные и коллективные блоги на отельных страницах, добавить новое условие на вывод какого-либо другого типа топика, например «открытые альбомы пользователя» не сложно, функционал в движке уже есть. Также есть экшен «ActionFilter», который выводит отдельный вид контента на странице.
8. Фотосет: фотосет сейчас довольно хорошо выполняет функции захгрузки фото, но его можно дополнить другими функциями: порядок фото, пометка человека на фото и т.д.
Вот в краце, как интегрировать функционал альбома с уже существующим функционалом Alto.
Если что-то забыл – пишите, дополню список.
Т.е. должно стать так:
После этого параметр включения/выключения будет работать нормально.
Но в style.min.css, разумеется, надо вернуть все на место
В текущей разрабатываемой версии 1.0.7 так:
В обоих случаях в результате в переменной $oPhoto получим фотографию, отмеченную как превью, в виде объекта ModuleTopic_EntityTopicPhoto. И получить ссылку на само изображение можно методом getUrl():
и т.д.
Либо, если поставить плагин TopicIntro, то можно еще проще:
— Идем сюда https://ulogin.ru/constructor.php
— Берем плагин для Livestreet
— На всякий случай здесь common/plugins/ulogin/classes/hooks/HookUloginWidget.class.php ставим <?php вместо <?
— В файле common/plugins/ulogin/classes/actions/ActionUlogin.class.php меняем $this->User_DeleteFoto($oUser) на $this->User_DeletePhoto($oUser) и $this->UploadFoto($photo_big,$oUser) на $this->UploadPhoto($photo_big,$oUser)
— Радуемся
Перенес базу сначала обновив LS 0.4.2->0.5.1->1.0.3
А затем установив alto, поставив галочку о конвертации.
Хотел бы указать ряд моментов, мне пригодились:
1. Смотрите внимательно при переносе базы. Первый раз получил после установки в некоторых местах fatal error, некоторые топики отсутствовали. Причина была проста-база обширная (свыше 70 мб, 5500 пользователей 11 тыр комментариев) и при ее сжатии через phpadmin файл не докачался. Повторил все еще раз — ошибок больше нет.
2.Если будете ставить на другой домен или поддомен (например для тестирования или настройки) — обратите внимание, что аватары и рисунки в профиле в базе сохраняются с полным путем, вида site.com/uploads/images/00/00/4.jpg.
При этом при работе на другом поддомене или домене аватары показываться будут, но везде в штатном размере 100х100, функция их уменьшенного показа $oUser->getAvatarUrl(24) (в комментариях, прямом эфире и т.д.)работать не будет.
Нужно обязательно прописать новый путь к аватарам вида newsite.com/uploads/images/00/00/4.jpg.
Обновить все легко в phpmyadmin, например так:
После переноса сохранились все топики, блоги, статичные страницы, юзеры, их связи, переписка.
Естественно, не сохранились плагины от старых версий LS. Особо они не нужны, но для меня актуально прикрепление файлов к топику. К сожалению, в коробке alto такое не умеет, в каталоге плагин такое тоже не нашел. А жаль. В свое время покупал aceBlogExtender только из-за возможности прикреплять файлы (именно прикреплять, а не создавать отдельный вид топика-файла). Нужно как-то думать как пристроить большое количество прикрепленных к топикам файлов.
Мой комментарий про простейший плагин, правда в контексте возможностей движка для переопределения стандартных классов, но принцип неизменен и для простого «Hello World».
Для простейшего вывода своего шаблона — просто определяем свой экшен и назначаем ему шаблон.
Пример плагина с подробными комментариями есть в AltoCMS 0.9.7.1 в папке /plugins/demo, в AltoCMS 1.0 /common/console/protected/plugin
Что вам придется делать в этом случае? Да ничего сложного, по большому счету, просто сначала вспомнить в каких классах и что вы меняли (еще вспомнить нужно вспомнить зачем, ибо со временем это забывается), потом сохранить все эти файлы, потом обновить движок и на основе старых файлов восстановить эти изменения.
Если же переопределять функционал движка через плагины, то по крайней мере не нужно помнить что и как вы меняли, так как если переопределенный класс претерпел в ходе обновления слишком значительные изменения вы это увидите. А скорее всего вообще ничего вспоминать и менять не придется, ибо принципы обратной совместимости в Alto пока еще никто не отменял.
Теперь подробнее про переопределение.
Для примера возьмем файл /common/classes/actions/ActionBlog.class.php
он содержит в нем есть свойство которое содержит в массиве список URL с котрыми запрещено создавать блог
и нам захотелось поменять этот список (добавить или убрать каке-то ключевые слова)
Для этого сделаем простейший плагин.
в папке /common/classes/actions/plugins создадим папку example в этой папке создаем папку classes, а в ней папку actions и уже в этой папке создаем свой файл ActionBlog.class.php со следующим содержанием
теперь возвращаемся в корневую папку плагина example и создаем там два файла PluginExample.class.php
и файл plugin.xml
Вот и все. Теперь можно идти в админку и включать наш плагин. Для тех, кто хочет сказать, что это слишком сложный путь для простого изменения отвечу: для одного изменения да, но если изменения у вас на сайте все же планируются, то проще сделать такой плагин и потом дописывать его по мере необходимости (новый плагин для каждого изменения делать не нужно!).
И напоследок — загляните в /common/console/protected/plugin/ и там вы найдете демо-плагин с подробными комментариями и полной структурой папок и файлов.
2) Очистить папки /_tmp/cache/ и /_run/
3) В файле /app/config/config.local.php задать нужный скин:
Первое правило — не трогать все, что находится в папках /engine, /common/classes и /common/classes/config
Второе правило — для любого изменения функционала — пиши плагин, ибо в плагине можно переопредилить классы движка, написать свои экшены, переопределить шаблоны и сделать почти все что угодно, кроме изменения двух системных классов (но оно вам и не понадобится)
Для более полной информации посмотрите вот это видео:
youtu.be/Kq35JnRI9hk?t=14m35s
Это доклад Вадима Шемарова (aVadim ) на конференции CMS Conference 2013 — очень полезное видео.
Мое упущение — не доглядел, что мы все равно к квадрату привязываемся. Исправим в будущем
С одной стороны, это позволит не привязывать скин к какому-то конкретному плагину (типа mainpreview), и скин будет работать и без него. А с другой — если добавить специальный плагин, то можно скин заюзать более эффективно (т.е. назначать дефолтную картинку руками и индивидуально)
исправил на это:
В совокупности код выглядит так:
Огромное спасибо!
{include file=«header.tpl» noSidebar=true}
убрать то что в жирным
В папке с шаблоном создал файл block.fb.tpl
Его содержимое:
В файле /config/widgets.php добавил следующее:
Все отображается отлично!
Может это из-за ?!
Положите сюда: /engine/lib/external/Smarty/libs/plugins файл modifier.spellcount.php с таким содержимым:
и выводите в шаблоне переменную таким способом:
Я бы посоветовал взять этот способ разработчикам на вооружение (;