DbHelp.ru
Маленький Yii блог
Комментарии
Гость: cbd lotion cbd cream | cbd oil dogs | what does cbd oil do cbd cream
Гость: cbd dog treats cbd oil for dogs | where to buy cbd cream | cbd oil indiana christian book distributo...
Гость: acai berry wЕ‚aЕ›ciwoЕ›ci saroten 25 absturzsicherung gelГ¤nder vorschriften calciumgluconat gel nag...
Гость: real money casino hallmark casino online | casino games no download no registration | casinos near m...
Гость: free slot play vegas slots online | da vinci diamonds free online slots | hollywood casino free slot...



Сервер Ultima Online - Forest Wars (от создателя данного блога)

artofart.ru - пишем cms на yii

Рубрика: Мои проекты

Оцените эту статью:

Рейтинг: 0.00 (0)
25 марта. 2010
Опубликовать в Twitter Написать в Facebook Опубликовать в своем блоге livejournal.com

Уже достаточно давно мною была написана маленькая система управления сайтом для Творческого объединения Art of Art. Изначально все страницы сайта были написаны на чистом html-е, поэтому пришлось всё это дело переписывать.

---

Yii Framework Blog img

Сайт для Art of Art изначально написала на html одна из московских студий. Почему они не предусмотрели в будущем расширение сайта и добавление объектов — я не знаю. Когда кол-во объектов перевалило за 30 — поддерживать все html странички стало очень сложно, поэтому обратились ко мне.

Было принято решение дизайн полностью оставить, но написать удобную систему для добавления новых объектов. Я взял yii и накидал простенькую систему за 3-5 дней.

 

Вот что получилось:

  1. Меню у нас древовидное. Я использовал не «нестедтри», а простенькое дерево id <=> id_parent.

    Yii Framework Blog img
  2. На каждую страницу через админку мы можем добавлять статьи. Менять ключевики, тайтл и другие метатеги. Также был подключен CKEditor (компонент NHCKEditor) в качестве визуального редактора

    Yii Framework Blog img
  3. Листалка для объектов была использована та, которая стояла изначально в html версии сайта

    Yii Framework Blog img
  4. На странице объектов красиво располагается листалка для фотографий

    Yii Framework Blog img
  5. На странице «контактов» отлично смотрится моя идея с математической капчей (http://dbhelp.ru/index.php/mathematics-captcha/page)

    Yii Framework Blog img
  6. Объекты на страницах категория сортируются в зависимости от площади. На странице объекта фотки сортируются в зависимости от типа помещения (кухня, санузел, план и тп.)
  7. Каждая фотка может иметь свое описание

    На закуску - пару скринов с админки:

    Yii Framework Blog img


    Yii Framework Blog img

    Yii Framework Blog img

Теперь пару технических моментов:

  1. Для подключения визуального редактора использовал компонент NHCKEditor, который очень легко настраивается. В коде просто пишу:
    $this->widget(
        'application.extensions.NHCKEditor.CKEditorWidget',
        array(
            'model' => $form,
            'attribute' => 'text',
            'editorOptions' => array(
                'width' => 800,
                'height' => 480,
                'language' => 'ru',
                'toolbar' => 'Full',
            ),
     
            'htmlOptions' => array(
                'rows' => 16,
            ),
        )
    );

    и получаю визуальный редактор на экране
  2. Для работы с файлами которые закачиваю на сервер через админку (картинки объектов к примеру) — использовал компонент file.
  3. Для ресайза картинок — использовал сначала phpthumb, но затем поменял на image. Заказчик хотел что б все картинки после ресайза были одинаковы, плюс к этому что б негде небыло пустых мест. Поэтому пришлось придумать хитрую формулу уменьшения:
    $w = $image->width;
    $h = $image->height;

    $h_new = $w / 1.3;

    if ($h_new <= $h) {
        // новый размер влазит в пределы картинки. режим
        $image->crop($w, $h_new)->resize(280, 0)->crop(280, 214);
    } else {
        // ну не лезит.. :(
        // уменьшим по высоте
    $image->resize(0, 214)->crop(280, 214);
    }
  4. Для создания математической капчи использовал свой маленький скрипт, который уже давно валяется у меня на блоге
    class MyCCaptchaAction extends CCaptchaAction
    {
        public function renderImage($code)
        {
            parent::renderImage($this->showCode($code));
        }
        
        protected function showCode($code) {
            // генерируем число от 1 до $code-1
            // для того чтобы это число потом отнять или приплюсовать к $code
            // поэтому $rand всегда должна быть меньше $code
            $rand = rand(1, (int)$code-1);
            // после этого случайным образом либо отнимаем от $code переменную $rand
            // либо складываем их. Данный тип записи является кратким if
            return (rand(0, 1)) ? (int)$code-$rand."+".(int)$rand : (int)$code+$rand."-".(int)$rand;
        }
        
        protected function generateVerifyCode()
        {
            return rand((int)$this->minLength, (int)$this->maxLength);
        }
    }
  5. В качестве фреймворка использовал yii
  6. База данных — mysql 4


ВЫВОД

Проект был слеплен очень быстро поэтому использовать что то большее — небыло просто времени. Тем не менее все поставленные задачи были выполнены. В данный момент сотрудничество продолжается в плане увеличения функционала и раскрутке, поэтому если у кого есть заряженый субмитер по каталогам — буду очень благодарен за прогон :)

Если кто надумает воспользоваться услугами "Art of Art" – смело говорите что вы читатель моего блога, думаю скидочку сделают :)

 

 



Если хотите опубликовать этот материал у себя - пожалуйста, разместите ссылку на страницу откуда вы его взяли.
Другие yii статьи:

  1. Сегодня проверял гугл на наличие материалов про Yii и наткнулся на неплохую статью про srbac. Появилась на сайте автора она ... "Часть 1 : Yii модуль SRBAC"

  2. Уже достаточно давно мною была написана маленькая система управления сайтом для Творческого объединения Art of Art. Изначально все страницы сайта ... "artofart.ru - пишем cms на yii"

  3. Столкнулся с проблемой кодировки при использовании mail() функции в php. Для меня было очень странным что тело письма приходит в ... "Проблемы с кодировкой в теме письма"

[adm] zolter

Было сказано: Четверг, 25 Март 2010

Сегодня постараюсь еще пост в этот раздел сделать с проектом что закончил на днях

[guest] Гость

Было сказано: Четверг, 25 Март 2010

Хорошо бы еще исходники увидеть, было бы намного нагляднее

[adm] zolter

Было сказано: Четверг, 25 Март 2010

К сожалению, исходники это уже собственность заказчика.
Но если есть конкретные вопросы по тому как что сделано - пишите, я вам расскажу и покажу :)

[guest] Тоха

Было сказано: Четверг, 25 Март 2010

Инетересно былобы узнать попдробне как у вас реализовано дерево.

[guest] Гость

Было сказано: Пятница, 26 Март 2010

Можно ссылку на компонент file? На сайте не вычислил

[guest] Гость

Было сказано: Пятница, 26 Март 2010

Или это cfile - http://www.yiiframework.com/extension/cfile/

[adm] zolter

Было сказано: Пятница, 26 Март 2010

Ага, Вот даже маленький обзор писал - http://dbhelp.ru/index.php/cfile-extension/page

Там кстати есть скрин в котором показано как дерево выводится в админке, это было сделано через CTreeView (http://dbhelp.ru/ctreeview-guide/page/)

[adm] zolter

Было сказано: Пятница, 26 Март 2010

to Тоха
Вот тут есть немного инфы по тому типу дерева что я выбрал - http://dbhelp.ru/blog-create-controller/page/

А реализация достаточно проста,
У меня есть модель Category. В relations я связываю её с собой же, что бы легко получать детей:

'child' => array(self::HAS_MANY, 'Category', "id_parent", 'order'=>'??.width ASC'),


У меня сортировка по умолчанию идет по полю width, т.е. "вес". У какой категории вес больше - там ниже. Этим в админке легко манипулировать и реализовать изменения места категории. Можно сделать к примеру и по id, но тогда порядок категорий будет фиксирован

Вывод меню тоже достаточно простой. Выводим элементы нулевого уровня (т.е. главные) и следующий уровень после них:

<?php
$menu1 = Menu::model()->findAllByAttributes(array('id_parent' => 0));
foreach ($menu1 as $key => $val) {
echo $val->name; // название родительской категории
if ($val->child) {
echo $val->child->name; // название категории детей
}
}


Если надо вывести третий уровень то это уже делаем foreach по $val->child и выводим $val2->child :)

[guest] Гость

Было сказано: Четверг, 08 Апрель 2010

А зачем телфон картинкой, хотел скопипастить, а тут на тебе, картика! Не удобно =(

[adm] zolter

Было сказано: Пятница, 09 Апрель 2010

Да так изначально верстальщик сделал, хз чего его так переклинело :)

[guest] никто

Было сказано: Суббота, 20 Ноябрь 2010

http://artofart.ru/dizayn-extererov
здесь неимоверно бесит, что текст скачет при загрузки новой картинки))) может отступ для текста сделать?

[guest] zolter

Было сказано: Суббота, 20 Ноябрь 2010

Так размер картинки в низ не фиксированный поэтому непонятно на сколько делать отступ :)

[guest] Гость

Было сказано: Четверг, 20 Январь 2011

Картинку засунуть в отдельный div с min-height

[guest] Роланд

Было сказано: Среда, 30 Март 2011

А что это за библиотека для картинок?

[guest] Гость

Было сказано: Среда, 11 Май 2011

zolter, скажите, пожалуйста, а как Вам можно написать лично?Хотелось бы мааааленький проектик на yii. У самого нет пока возможности заняться изучением, а необходимость стойкая. Может Вы могли бы взяться?

[guest] Ст

Было сказано: Среда, 11 Январь 2012

zolter, я разобрался :)
echo CHtml::image(Yii::app()->baseUrl.'/'.$link_to_image);

Но меня интересует ещё один вопрос. Каким образом сделать возможность комментирования только для авторизованных пользователей?

[guest] Новичок

Было сказано: Вторник, 17 Январь 2012

zolter, скажи пожалуйста, как сделать такой виджет для публикации новости в социальной сети. У тебя под каждым постом такая фича. Где-то есть готовая или у тебя самописная?

[guest] zolter

Было сказано: Вторник, 17 Январь 2012

А просто посмотри HTML код этих кнопок с моей страницы, думаю со всем разберешься! Единственное что код из ВКонтакте надо устанавливать отдельно, зайти на их сайт и там есть раздел для разработчиков, там и выдается код.

[guest] Новичок

Было сказано: Вторник, 17 Январь 2012

zolter, спасибо! Завтра попробую прикрутить данную штуку)

[guest] Гость

Было сказано: Воскресенье, 22 Январь 2012

[b]zolter,[/b] а как ты думаешь, у меня есть таблица "content", я хочу для каждой новости сделать таблицу, в которой будет храниться её раздел (другим словом: узел или родитель). В этой таблице хочу впихнуть и строчку с айдишником 1 - "Без родителя". Но я думаю как назвать правильно таблицу. То ли "node", то ли "parent". Подскажи, что будет правильным?

[guest] zolter

Было сказано: Понедельник, 23 Январь 2012

Привки, да это если честно дело вкуса. Называй так что бы сам не запутался потому что у тебя в этой таблицы. Кому то удобнее называть узлы (node-s), кому то дети/родители (parent/child). Единый совет, это придерживайся одного способа именования таблицы (либо все во множественном, либо все в единственном), то я раньче грешил на это и получалась белиберда :)

[guest] odesoftami

Было сказано: Вторник, 31 Январь 2012

Красиво!!! А самое главное удобно!!!!!

[guest] Sasha_ch

Было сказано: Понедельник, 27 Февраль 2012

У меня сортировка по умолчанию идет по полю width, т.е. "вес". У какой категории вес больше - там ниже.

мелочь конечно, но
вес это weight

[guest] Sasha_ch

Было сказано: Пятница, 02 Март 2012

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

[guest] Гость

Было сказано: Четверг, 23 Август 2012

Art of fart

[guest] SchilleR

Было сказано: Воскресенье, 21 Октябрь 2012

А можно узнать как был организован urlManager какое правило для него и для подпунктов подменю получается? Или организован свой класс идет? как идет поиск необходимого Url допустим для /example/example2/example3, у заказчика есть ограничение на количество уровней вложенных подменю?

Оставить комментарий


Код:
Имя: