avatar
+5.40
7.590

Стас

Здравствуйте. Версии для старого и нового поколений Alto будут разными и в каталоге они будут представлены отдельно, так как не совместимы между собой. Сейчас в каталоге нет такого функционала, что бы можно было выложить две разных версии по одной цене, но я буду высылать плагин людям по запросу, если им понадобится плагин для новой Alto 1.0
Да, я с вами согласен. Просто сейчас доделываю плагины и еще есть некоторая работа. Но в ближайшее время хочу написать об этом подробнее в отдельном топике. Это довольно большая и интересная тема.
Но решил все же поправить, а то не совсем понятно получается. Спасибо.
Никаких опечаток, это плагин для версий Alto начиная с версии 0.7 до 0.9.7.1 включительно. Для версии Alto 1.0 — он не подойдет. Его опубликую чуть позже.
Можно делать и в исходном классе, но вот представьте, вы один раз что-то поменяли, потом другой раз, а потом еще раз. и т.д. и тут, в один прекрасный день, вышла новая версия Alto, в которой добавили много интересных вещей и исправили кучу ошибок.

Что вам придется делать в этом случае? Да ничего сложного, по большому счету, просто сначала вспомнить в каких классах и что вы меняли (еще вспомнить нужно вспомнить зачем, ибо со временем это забывается), потом сохранить все эти файлы, потом обновить движок и на основе старых файлов восстановить эти изменения.

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

Теперь подробнее про переопределение.
Для примера возьмем файл /common/classes/actions/ActionBlog.class.php
он содержит
class ActionBlog extends Action {...}
в нем есть свойство которое содержит в массиве список URL с котрыми запрещено создавать блог
protected $aBadBlogUrl = array('new', 'good', 'bad', 'discussed', 'top', 'edit', 'add', 'admin', 'delete', 'invite', 'ajaxaddcomment', 'ajaxresponsecomment', 'ajaxgetcomment', 'ajaxupdatecomment','ajaxaddbloginvite', 'ajaxrebloginvite', 'ajaxremovebloginvite','ajaxbloginfo', 'ajaxblogjoin');
и нам захотелось поменять этот список (добавить или убрать каке-то ключевые слова)
Для этого сделаем простейший плагин.
в папке /common/classes/actions/plugins создадим папку example в этой папке создаем папку classes, а в ней папку actions и уже в этой папке создаем свой файл ActionBlog.class.php со следующим содержанием
<?php
class PluginExample_ActionBlog extends PluginExample_Inherit_ActionBlog {
    protected $aBadBlogUrl
        = array('здесь','пишем','нужные','нам','слова'
        );
}
теперь возвращаемся в корневую папку плагина example и создаем там два файла PluginExample.class.php
<?php

if (!class_exists('Plugin')) {
    die('Hacking attemp!');
}

class PluginExample extends Plugin {

    protected $aInherits=array(
	'action' => array(
            'ActionBlog'
        ),
    );

    public function Init() {
        
    }
}
и файл plugin.xml
<?xml version="1.0" encoding="UTF-8"?>
<plugin>
    <name>
        <lang name="russian">Example</lang>
    </name>
    <author>
        <lang name="russian">автор</lang>
    </author>
    <homepage>http://example.com</homepage>
    <version>1.0.0</version>
    <description>
        <lang name="russian">Описание плагина Example</lang>
    </description>
</plugin>
Вот и все. Теперь можно идти в админку и включать наш плагин. Для тех, кто хочет сказать, что это слишком сложный путь для простого изменения отвечу: для одного изменения да, но если изменения у вас на сайте все же планируются, то проще сделать такой плагин и потом дописывать его по мере необходимости (новый плагин для каждого изменения делать не нужно!).

И напоследок — загляните в /common/console/protected/plugin/ и там вы найдете демо-плагин с подробными комментариями и полной структурой папок и файлов.
А еще лучше сделать простейший плагин и переопределить
class ActionProfile extends Action {...}
в нем как
class PluginExample_ActionProfile extends PluginExample_Inherit_ActionProfile {...}
а там уже переопределяем нужный метод.

Таким образом мы избежим головной боли и длительных воспоминаний всех изменений в коде, при обновлении движка на свежую версию.
Да, 1.0. Пока это бета версия в которой структура и функционал уже меняться не будут. Сейчас устраняются мелкие баги и сама версия вполне рабочая. Ждать релиза стоит только тем, кто уже имеет рабочие сайты и желает обновиться но новую версию.
Вопросы новичков не никого утомляют, блог вопросы для того и создан и задав ваш вопрос вы не только вы прочитаете на него ответ, но все те, у кого будут такие же или похожие вопросы.

По блогам: самое простое решение по отключению блогов — это отключить все ненужные типы блогов в админке (/admin/settings-blogtypes/) включая персональные и поднять ограничение по карме на создание нового блога до большого значения (over 9000). В шаблоне убрать ссылку (или сделать видимой только админам) на создание блога, оставить только на создание сообщения.

По воду тегов: сейчас в движке нет такого функционала, нужно делать плагин для этого или искать существующий здесь и на catalog.livestreetcms.com. Плагины с LS не все могут заработать, тем более на версии 1.0, но переделать их в большинстве случаев не сложно.

Ну и если вы делаете новый проект, то лучше начинать с версии 1.0 (скачать последнюю с GitHub github.com/altocms/altocms/archive/master.zip), так как если начнете делать на предыдущей версии — все ваши наработки рано или поздно придется переделывать под новую версию, ибо все новинки (плагины) улучшения и прочее, будут уже только для версии 1.0+
Картинку выбирал долго… начиная с милых котиков и букетов, заканчивая жестким техно трешом. Выбрал эту картинку, как наиболее характерную для нас всех, обычных людей, которые любят IT и не стыдятся слова «ботаник» в обществе "настоящих мачо". (хотя это только они так думают) :)
Концепция интересная, выкладывайте на GitHub — поглядим и более предметно обсудим.
Согласен со всем, кроме того, что:
«Дефолтный шаблон должен быть более функциональным и гибким с большим количеством вариантов подачи контента. » — он именно и должен быть таким. Ну если моего мнения не совсем достаточно — посмотрите дефолтные шаблоны у Joomla, Wordpress, etc.
Дизайн великолепен, шаблон замечательный.
Всем, кому нужно большее — в раздел дополнений, который, уверен, скоро наполнится как бесплатными, так и более провинутыми платными, шаблонами и плагинами.
Этот шаблон, как мне кажется, и должен быть дефолтным. А dev шаблон — это каркас с минимальными стилями и базовым набором js-скриптов.
У вас часом не nginx+apache на хостинге? Или у вас VPS?
Спасибо за ответ. Сейчас как раз переделываю плагин под 1.0 и проверю обязательно. А вы все же обновите файлы движка, ибо с февраля уже много чего исправили.
А данный баг у вас на версии 0.9 или уже на 1.0?
Про скрипт почитайте здесь:
myrusakov.ru/javascript-dynamic-form.html — основы
www.clone.h16.ru/css-js/5/ — подробности
Ну и запрос в Google «Валидация формы с помощью js» — даст еще больше вариантов.
P.S.
Прошу прощения за ссылки и гугл, но в двух словах дать вам готовый рецепт не получится.
Ну если хочет человек свою почту светить… по моему это его личное дело. Его реальная почта, которая используется на сайте для сброса пароля, не видна — остальное на совести пользователя. Это мое ИМХО, конечно.
А если у меня ник содержит @ и мне это нравится? Нужно проверять что бы пользователь не использовал e-mail, который он использовал при регистрации, и потом, если он решит сменить e-mail, тоже. Так что проверять нужно не на символ "@", а на соответствие пары ник — e-mail.
Вы что-то не так делаете, ибо вот содержимое объекта $oTopic типа ModuleTopic_EntityTopic при вызове метода EventEdit() при редактировании топика.
CLASSNAME   string	"ModuleTopic_EntityTopic"	
aExtra	    array[5]		
aValues	    boolean	0	
_aData	    array[39]		
aValidateRules	array[8]		
aValidateErrors	array[0]		
sValidateScenario	string	""


Посмотрите в любой IDE через xdebug.
Уверен, что немного подробностей не помешают.