Powered by CodeIgniter

Уроки

(28)
14
16 голосов
Учиться, учиться и еще раз учиться — развитие личности идет таким путем.
Друзья, доброго времени суток. По многочисленным просьбам с вашей стороны, сегодня расскажу вам, как можно добавить иконку к публикации отдельным полем в форме создания/редактирования материалов. На создание шестеренки «Иконка публикации» у меня ушло меньше пяти минут, поэтому советую и вам освоить этот простой урок.

Файловая структура

Файловая структура

Представим себе конечную цель и решим, что нам потребуется для ее реализации. Итак, мы уже определились — нам нужно создать возможность загружать иконку к публикации отдельным полем. Можно, конечно, изменить шестеренку nodes, что будет быстрее, но мы пойдем правильным путем для сохранения модульности — создадим новую шестеренку node_icon.
Файловая структура будет обычной за исключением того, что нам не понадобятся ни контроллеры, ни модели, а только лишь один файл с хуками.

Файл конфигурации

/gears/node_icon/node_icon.info:
title = Node icon description = Add image to node group = plugins enabled = FALSE ; Задаем размер иконки до которого будет мастшабироваться загружаемое изображение icon_size = 100x100

Интернационализация

/gears/node_icon/lang/ru.lng:
[gears] node_icon = "Иконка публикации" node_icon_description = "Добавляет отдельное файловое поля для загрузки изображения к публикации."

База данных

Дамп будет импортирован в базу при установке шестеренки.
/gears/node_icon/install.sql:
ALTER TABLE `nodes` ADD `icon` VARCHAR( 255 ) NOT NULL AFTER `body`;

Хуки

/gears/node_icon/_hooks.php:
<?php /** * Node icon hooks * * @author Dmitriy Belyaev <admin@cogear.ru> * @copyright Copyright © 2010, Dmitriy Belyeav * @license http://cogear.ru/license.html * @link http://cogear.ru * @package Node Icon * @version $Id$ */ function node_icon_form_result_($Form){ $CI =& get_instance(); if($Form->name == 'node_createdit'){ $Form->image('icon',array( 'upload_path' => _mkdir(ROOTPATH.'/uploads/nodes_icons/'), 'resize' => $CI->gears->node_icon->icon_size, ),5); $Form->set_values($Form->data); } } function node_icon_node_show_($Node,&$node,$type,$return){ $CI =& get_instance(); if(!empty($node->icon)){ $node->body = $CI->builder->span($CI->builder->img($node->icon),'fright').$node->body; } }
Как видите, хука всего два. Первый добавляет поле в таблицу редактирования публикации, второй — картинку к отображению публикации.

Вывод

Вы можете оценить столь малое количество телодвижений для реализации поставленной задачи и сохранение принципа модульности — шестеренки активируются в один клик.
Дистрибутив обновлен.
14:29 ← 04 февраля 2010 Отправить в Твиттер adminadmin  RSS comments 15

Комментарии (15) ↓

agoodis agoodis time 15:41 ← 04 февраля 2010 #
Огромное спасибо! )
Автор
admin admin time 16:14 ← 04 февраля 2010 #
Пожалуйста!
inetlover inetlover time 19:34 ← 05 февраля 2010 #
Спасибо за урок!
Автор
admin admin time 19:40 ← 05 февраля 2010 #
You're welcome.
inetlover inetlover time 20:41 ← 05 февраля 2010 #
Я вроде тут всегда :-) И даже придумал, как придать Cogearу уникальности, чем сейчас и занимаюсь :-). Доведу это дело сам до полуфабриката и опять начну мучить всех своими детскими вопросами. :-)
Автор
admin admin time 20:45 ← 05 февраля 2010 #
Это такое выражение просто :-) Жду, очень жду.
zeffs zeffs time 23:05 ← 22 апреля 2010 #
A PHP Error was encountered

Severity: Notice

Message: Undefined index: crop

Filename: models/upload.php

Line Number: 120

Вылетает такая ошибка что посоветуете
Автор
admin admin time 23:23 ← 22 апреля 2010 #
Заменить эту строчку на:
if(empty($image['resize']) OR isset($image['crop']) && !is_string($image['crop'])){
zeffs zeffs time 00:12 ← 23 апреля 2010 #
Спасибо за оперативность. Теперь иконки вообще не добавляются. :( пишет, что успешно данные обновлены, иконка не появляется
Автор
admin admin time 00:17 ← 23 апреля 2010 #
Попробуйте оставить просто:
if(empty($image['resize'])
zeffs zeffs time 00:52 ← 23 апреля 2010 #
К сожалению все осталось.(успешно данные обновлены...). При том такая беда на двух хостингах. Может проблема в версии? Качал тут, пару дней назад.
Автор
admin admin time 10:02 ← 23 апреля 2010 #
Права на папку /uploads выставлены рекурсивно? Простые изображения в пост загружает? Проверил на локалке — работает как следует.
zeffs zeffs time 23:48 ← 23 апреля 2010 #
Простые загружаются. Вообще все загружаются.
появился еще симптом моей проблемы иконками :( Но картинки в папку nodes_icons загружаются
A PHP Error was encountered
Severity: Notice
Message: Undefined index: crop
Filename: models/upload.php
Line Number: 228
Автор
admin admin time 00:57 ← 24 апреля 2010 #
Попробуйте загрузить свежий дистрибутив.
Ramir Ramir time 03:30 ← 29 декабря 2010 #
На чистом движке шестеренка «Иконка публикации» активна, но в таблице нет столбца — icon.
Лечение: выключить, а затем включить шестеренку.