| Профиль | Блог (125) | Комментарии (1720) | Закладки (11) | Продукты (13) |
Друзья, приветствую. Пару дней назад, 16 июня 2010 года, исполнился год, как cogear появился на свет. В связи с этим стоит приоткрыть завесу тайны над тем что твориться в самом сердце движка и рассказать об основных задачах, стоящих перед командой разработчиков проекта.Социальная сеть, написанная на Codeigniter. Из всех виденных движков у автора этого — самый серьёзный подход к документации, внешнему виду и всем и всяческим мелочам. И вообще, автор проделал гигантский рывок при написании этого движка. Продуманная архитектура позволяет при наличии знаний сделать на Cogear что угодно, хотя движок и заточен на соцсети. В недостатках то, что весь воз автор тянет на себе в одиночку и явно устал. Хотя и грозится переписать с нуля и не на CI. В каталоге плагинов сейчас имеется десяток дополнений и ни одной темы, но написание расширений очень простое и быстрое за счёт архитектуры и системы хуков. Также иногда случаются косяки, и движок совершенно не дружит с вин-хостингом. Но на багрепорты автор реагирует очень быстро.Несмотря на то, что данная статья была опубликована автором сравнительно недавно, большая часть указанных нюансов уже решена.
Самое главное — сообщество cogear растет и крепнет с каждым днем, также как и интерес людей к проекту.
У нас замечательные программисты — IceDragon, suder, Freem, dreycorp; талантливые дизайнеры — dqpb, GrinGoO; и много новичков, активно проявляющих себя в жизни сообщества, и других.
Автор статьи прав, за два года закрытой и публичной разработки я утомился пахать это поле в одиночку.
Core Team
На данный момент в центре всех событий помимо меня находится Миша IceDragon, поскольку мы земляки и периодически пересекаемся на просторах города на Неве, а также часто созваниваемся для решения глобальных задач по проекту. Если вы хотите принимать активное участие в будущем проекта — просто обращайтесь к нам.Проект развивается и растет, поэтому некоторые вещи, написанные в одиночку год назад, например, кажутся уже неуместными. В силу подобных обстоятельств мы твердо решили, что нужно не просто «перевести движок на jQuery», но возвести новую версию системы за максимально короткие сроки и с максимальной эффективностью.
Много стоящих мыслей и идей сконцентрированы в наших умах, поэтому мы идем с ними к вам, с целью посоветоваться и скорректировать вектор развития прежде, чем приступать к их реализации.
СПбГУ ИТМО
Важная новость о материализации нашего общего труда. В течение ближайших недель я целенаправленно поступаю в инновационную магистратуру СПбГУ ИТМО по степени «магистр технологического предпринимательства», где главным моим проектом станетВ перспективе хочется внести посильный вклад в развитие OpenSource-движения в Российской Федерации и через пару лет сделать cogear всемирно известной системой наравне с WordPress, Drupal и Joomla.
Версия 2.0
Напомню, зачем мы все это делаем. Да, нам нравятся Drupal, WordPress и Joomla, но мы не стремимся «заново изобретать велосипед», а стараемся представить вам квинтэссенцию всего положительного, что мы получили от работы с разными системами за годы службы на фронте веб-разработок.Кто-то слишком сложен для понимая, кто-то потребляет нереальное количество памяти, кто-то просто не удобен в работе — мы подведем знаменатель под каждым недостатком.
Основные положения второй версии:
- jQuery. Самый распространенный JS-фреймворк. На все случаи жизни.
- ООП. Паттерны программирования и использование Standart PHP Library.
- Мультисайтовость. На одной сущности движка может быть запущено сколько угодно сайтов. Обновилась шестеренка? Обновляете один раз для всех сайтов.
- Расширяемость. Как и прежде, «шестеренки» на любой вкус и цвет. Теперь вы сможете объединять шестеренки в пакеты, и на разных сайтах (при мультисайтовости) использовать разные конфигурации. Например, можно будет пакет «Сайт-визитка» и другие для использования их в качестве готовых решений.
- Структурность, иерархия. В новой версии будет четко выделятся структура сайта, в свою очередь связанная с роутингом. Все вопросы касательно созданиях разных меню на сайте, карты сайта и подобные будут решаться в кратчайшие сроки.
- Каталог расширений. Вы сможете просматривать каталог расширений и устанавливать их прямо из админки.
- Документация. Для привлечения к проекту новых разработчиков, как и в случае с первой версией, он будет полностью задокументирован в лучших традициях нашего сообщества. Участвующие в создании новой версии программисты также будут придерживаться единого стиля написания кода.
- Автообновление. Движок будет самостоятельно следить за обновлениями и обновляться одним движением мышки.
Ответы на вопросы:
- Первая версия будет поддерживаться, как и прежде.
- Постараемся запустить новую версию к началу осени.
- Для переезда в первой версии на вторую будет написан конвертер. Пара минут — и вы уже обновились.
С радостью выслушаем все ваши пожелания.

Если есть потребности в не грамоздких шестеренках, обращайтесь, попробую сделать, с удовольствием.
Спасибо за движок. Желаю процветания, притока пользователей и разработчиков с дизайнерами жертвующих свой труд.
Буду спать спокойно!
А мультиязычность?
Забыли про единственную если неошибаюсь ksi
Кто-то слишком сложен для понимая ))
Мультисайтовость Присоединяюсь к комментарию выше: мультиязычность. Хотя бы принципиальную возможность без грязных хаков её сделать.
Процитирую самого себя: Простую галерею для cogear несложно соорудить. Магазин тоже не особо проблемно, хотя и муторно. О форуме кто-то уже в сообществе говорил. А даже и без него хаброподобные движки не проблема использовать для форумных целей. А вот многоязычность если в проект не заложена, то… Справедливости ради, здесь хоть тушкой, хоть чучелом, паллиативно, а многоязычный сайт соорудить можно, как я понимаю.
Если ему нужно что бы движок поступал с пачкой изначальных переводов — это одно, а если он хочет что бы его сайт и контент дублировались на разных языках — это другое, и тут будет по сложнее.
А мультиязычность логичней всего через мультисайтовость и реализовать, т.е у пользователя будет N количество сайтов с разной локализацией а контент уже сами будут вносить в зависимости от языка, так что никаких телодвижений в данной сфере и делать не нужно, все уже готово.
Во-вторых, на когире можно создавать не только сообщества, где, действительно, на каком языке пользователь написал, на таком и будет, но и полный спектр от визиток до хороших порталов-каталогов.
Самый простой вариант — это поставить два разных сайта (даже на два разных домена, или в подкаталог) и у одного включить один язык и наполнять контентом на одном языке, а у другого соответственно. И ссылки друг на друга. Но это же не кошерно.
И вы готовы на подобную мелочь тратить свое время?
Плюс представим если сайт имеет 3-4 языка, получается еще пачка форм, кому такой монстр нужен?
Отключите шестеренку и наслаждайтесь минимализмом :)
Действительно ли оно так нужно?
Сделайте шестеренку проведения конкурсов, на базе node, и труды будут монетизированны и направлены в русло которое требует сообщество.
Или же заказать написание требуемой шестеренки непосредственно у фрилансеров.
Зачем мне тратить свое время и средства на то что мне лично не нужно?
Можно и впросак так попасть
Необходимо четко структурировать и регламентировать заявки на реализацию нового функционала, и выставить приоритет для задач.
В противном случае получится что прихоти всем по выполняли, форумы там всякие, магазины бестолковые и плюшки «ради удобства клиента» а действительно важные вещи останутся без внимания.
Пожалуйста, структурируйте, регламентируйте, выставляйте приоритет, если это вам так необходимо. Делайте.
Если же не вы будете делать, то очевидно, что и приоритет выставлять будете не вы.
Ну или по крайней мере, назовите «действительно важные вещи», которые «останутся без внимания» (ведь для того топик и создавался, чтобы все, в том числе и вы, могли высказать пожелания для дальнейшего развития).
И кстати, чем реализация многоязычности может помешать этим «действительно важным вещам»?
Опять же вопрос как завязать мультисайтовость(домены и поддомены) + мультиязычность :)
Вообще от системы веет приятностью и дружелюбием, благодаря, прежде всего Дмитрию. Кроме всего прочего мало какое сообщество проявляет себя так сплоченно и целенаправленно идет к улучшению системы. Я думаю не за горами то время, когда Cogear станет мировой системой и количество сайтов разработанных не ней будет переваливать за миллион…
Со своей стороны тоже обещаю вкладывать имеющиеся время и силы для развития системы.
это CRUD и другой Grid — кому интересно могу дать потестить.
1й пример
$oProduct = new Ext_Model('products'); $oBrand = new Ext_Model('brands'); if($id && $product = $oProduct->getOne(array('id'=>$id))){ $title = t('edit_product').$product->model; } else { $title = t('create_product'); } $aBrands = $oBrand->getList(); foreach($aBrands as $br_elment) { $brands[$br_elment['id']] = $br_elment['name']; }2й пример
class Products extends Ext_Model { function __construct(){ $this->table = 'products'; parent::Ext_Model(); } function getListWithImages($where=null, $sort=null, $limit=null) { $prods = $this->getList($where, $sort, $limit); foreach($prods as $id => $prod) { if ($img = $this->images->getImage('product', $prod['id'])) { $prods[$id]['product_i']['original'] = $img->image_uri; $prods[$id]['product_i']['180x218'] = str_replace('products/','products/180x218/', $img->image_uri); } else { $prods[$id]['product_i'] = array(); $prods[$id]['product_i']['original'] = ''; $prods[$id]['product_i']['180x218'] = ''; } } return $prods; } } // ------------------------------------------------------------------------index.php: $config['pager']['page'] = $page; $config['pager']['per_page'] = 5; $config['pager']['base_url'] = $this->new_uri; $config['where'] = array('enabled' => 1, 'new' => 1); $cnt = $this->products->count($config['where']); $page = $this->pager((int)$config['pager']['page'], $cnt, $config['pager']); $limit = array('num'=>$page['limit'], 'start'=>$page['start']); $products = $this->products->getListWithImages($config['where'], '', $limit);$Grid = new Grid(); $Grid->setTemplate('shop grid'); $Grid->setCallback('GridBeforeDraw_Products'); $Grid->setExtraValues($config); function GridBeforeDraw_Products($aRow) { $CI =& get_instance(); $currency = $CI->session->get(«currency»); switch($currency) { case 'USD': $valCurrency = '$'; $aRow['price'] /= 30.8840; break; case 'EUR': $valCurrency = '€'; $aRow['price'] /= 38.8840; break; default: $valCurrency = '$'; } if (!empty($aRow['product_i']['180x218'])) $aRow['img'] = $CI->builder->img($aRow['product_i']['180x218'],array('width'=>'180')); else $aRow['img'] = ''; $aRow['currency'] = $valCurrency; unset($aRow['product_i']); return $aRow; } $Grid->setStaticData($products); $this->builder->div($Grid->Draw(), true);<?php $tov_cnt = ''; if (isset($this->extraValues["cnt"]) && isset($this->extraValues["all"])) { $tov_cnt = "<div> Товары <strong>".($this->extraValues["current"]+1)."</strong>-<strong>".($this->extraValues["cnt"])."</strong> из <strong>".$this->extraValues["all"]."</strong></div>"; } echo $tov_cnt; ?> <table class="grid"> <thead> <tr> <th>Фотография </th> <th>Название</th> <th>Цена</th></tr> </thead> <tbody> <tr> <td style="width:180px;"> <a style="float: right;" href="{$product_link}"> {$img} </a> </td> <td> <a href="{$product_link}"> {$model} </a> {$description} </td> <td> <div class="price" style="text-align: center;">{$currency}{$price}</div> <span> <a href="javascript::;" onclick="add_item({$id})"> <img src="/templates/shop/img/button_buy_now.gif" alt="Buy Now" title=" Buy Now " width="81" height="23"> </a> </td> </tr> </tbody> </table> <div> <?php echo $tov_cnt; ?>также — просто чем стандартный грид не устраивает — там невозможно несколько блоков в одном столбце разместить
т.е. название а ниже описание — неполучится. в моем можно и формы делать и все что необходимо.
поэтому не стоит его применять (depricated)
лучше использовать tpl шаблоны
дурацкихподобных разработок аля Живая и Большая улицы.То, что на Хабре, я не побоюсь этого слова, !-НАШ-! движок встретили прохладно не должно нас расстраивать, наше сообщество хоть и маленькое, но дружное и уверенно набирающее новых адептов. Мы еще покажем им всем Кузькину мать ;).
Думаю, что выражу всеобщее мнение сказав, что сообщество всячески поддержит CoGEAR.
Спасибо Вам Дима! Это поистине колоссальный труд!
Мы с Дмитрием съездим на семинар, а потом будем плотно обдумывать движок )
Оставляйте пожелания, для этого тема и была в общем то создана )))), чтобы нам было что завтра обсудить.
Конечно с точки зрения разработчиков система выглядит как конфетка! Но надо взглянуть в перспективе как на нее будет смотреть простой пользователь, решивший с нуля сделать сайт, определить его основные потребности и возможный порог. Либо определить позицию системы, как распространяемую не как Попсу, а через веб-разработчиков для клиентов.
От этого будет зависеть и базовый функционал.
Может конечно об этом еще рано говорить, но если определить сейчас, то в дальнейшем будет легче конкурировать с уже укоренившимися на рынке системами.
Мне хотелось бы услышать ответ «разработчиков» по этому поводу.
Будут ли «их усилия» тратиться на разработку блого-социального движка или на комбайна?
Потому что учитывая определенные комментарии, мне начинает казаться что я сделал не правильный выбор.
я думаю тут будет 2 направления. У меня есть задачи и на создание сайтов (я потом выложу что и как) и на создание социальной сети. Думаю что разночтений тут и нету — полагаю, что система будет социальной (как и развивалась до этого), но чтобы на ней можно было собрать сайт для заказчиков — многого менять не надо — просто поставить необходимые шестеренки и все. Кому что надо тот и выбирает что ему потребуется
Потом выложу, если ничего не помешает, туториалы как переделывать под корпоративный сайт.
недоделанная демка магазина пока что не работает корзина и еще некоторые чтуки.
Кому то нужен магазин — он сам его делает.
Функционал который нужен лично мне я сам и реализовываю, и считаю бессмысленным возлагать мои обязанности на других, требуя реализовать что то в движке.
так и будет.
Здесь сообщество, и в нем принято обсуждать его действия. А то что у вас дата регистрации раньше не дает вам никаких преимуществ и прав осуждать остальных участников.
Формат url останется прежний?
$router -> Add('/',array('controller'=>'index','action'=>'index'));
$router -> Add('/user/login',array('controller'=>'user','action'=>'login'));
$router -> Add('/user/logout',array('controller'=>'user','action'=>'logout'));
$router -> Add('/user/search',array('controller'=>'user','action'=>'search_by_name'));
$router -> Add('/user/:uid',array('controller'=>'user','action'=>'user_profile'));
$router -> Add('/tags',array('controller'=>'tags','action'=>'show'));
полагаю, естественно, что это должно управляться из админки