CodeIgniter + HMVC маленький багфикс

Знаете, есть маленькая неприятность обнаруженная совсем не вовремя.

В общих чертах у последнего CodeIgniter 1.7.2 загруженного из SVN и HMVC библиотеки для модульности (вы же надеюсь её используете если работаете с CI?) при РУЧНОЙ загрузки и подключении к базе данных есть баг, просто не грузится класс и не создается подключение.

Как показало «расследование» с пристрастием, ошибку содержит именно HMVC.

Давайте исправим. Открываем наш файл Controller.php из папки application/libraries нашего приложения. находим
public function database($params = '', $return = FALSE, $active_record = FALSE) {

и правим на
public function database($params = '', $return = FALSE, $active_record = <b>NULL</b>) {


можно было бы сохранить и всё бы заработало, но всё же код лишний присутствует и пугает своей бредовой старостью и неуважением к типам

дальше уничтожаем строку

if (class_exists('CI_DB', FALSE) AND $return == FALSE AND $active_record == FALSE)
    return;


и заменяем на вот эти две строки

$CI =& get_instance();
if (class_exists('CI_DB', TRUE) AND ($return === FALSE) AND ($active_record === NULL) AND isset($CI->db) AND is_object($CI->db)) return FALSE;


Всё, можно смело запускать и радоваться загружая свои любимые профили баз как захочется
$this->load->database( 'production' );

Мелочь отладки, а приятно

Знаете, есть же всё же у каждого программиста с опытом свои фишки, свои привычки, свои так сказать маленькие чертики в головах. И порой эти фишки казалось бы маленькие и очевидные, когда ты их знаешь или читаешь, но порой так облегчают жизнь. Предлагаю делиться такими мелкими фишками и не зажимать их от глаз коллег.

Я начну, пока с мелочи, но важной, очень — ОТЛАДКА.

Меня всегда мучила проблема отладки и запуска кода на рабочей (девелоперской) машине и рабочем уже сервере.
Это настройки подключения к базе данных, это другой домен, совершенно не те пути к домашней папке и т.п. Выносить в конфиги, править и править. А когда разработчиков не один или два, у каждого свои данные по базе, свои пути и прочие индивидуальные настройки. Муторно, а мы любим просто, отладил на локальной машине, открыл ftp, залил, вуа-ля — заработало!

Потому моё решение очень простое.
Так как я ставлю на рабочую машину всегда Apache, то просто в корне своего сайта в файле .htaccess создаю строку
SetEnv "MPAKENV" "development"

например так.

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

Пример того же простого конструктора с различными данными подключения

class Mein_Spyder{
	protected function database(){
		return (!empty($_SERVER['MPAKENV'])) ?
			array(
				'login'		=> '{LOGIN_DEV}',
				'psw'		=> '{PAS_DEV}',
				'database'	=> '{DB_DEV}',
				'host'		=> '{HOST_DEV}'
			)
			:
			array(
				'login'		=> '{LOGIN_PROD}',
				'psw'		=> '{PAS_PROD}',
				'database'	=> '{DB_PROD}',
				'host'		=> '{HOST_PROD}'
			);
	}
	public function __construct(){
		$db = $this->database();
		$this->db = new PDO('mysql:host='.$db['host'].';dbname='.$db['database'], $db['login'], $db['psw']);
		$this->db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
		$this->db->setAttribute( PDO::ATTR_ORACLE_NULLS, PDO::NULL_TO_STRING );

		$this->db->query('SET NAMES "utf8"');
		$this->db->query("SET sql_mode = default");
	}
...
}


Извините, просто кусок кода из рабочего проекта, вполне такой простой и понятный на мой взгляд, но написанный один раз, будем перезаливать его сотню раз.

В общем, порой «окружение» может нам помочь очень часто, высказывайтесь о своих «фишечках» не стесняйтесь
  • 0
  • 31 января 2010, 16:25
  • MpaK
  • 5+5

Конференция уральскив Веб-разработчиков UWDC2010

Наконец-то и у нас на Урале состоится крупная веб-ориентированная конференция.
Мероприятие пройдет 27 и 28 февраля в Челябинске в отеле Холидей Инн, и будет называться
Ural Web Developer Conference — UWDC’2010.
Участие в конференции бесплатное! Но общее количество участников ограничено —
не более 300 человек. Так что спешите регистрироваться.


Тут форма регистрации

Интересная и разноплановая программа мероприятия

В целом пост служит привлечение уфимцев на поездку, вместе как говориться веселее и голова болит ;-)

AJAX и история или одна из идей как упростить себе труд

В целом об AJAX написано много. Море фреймворков, библиотек, учебников, уроков вокруг облегчающих работу с этой технологией. Но всегда хочется сделать еще проще, еще удобнее и иногда быстрее чем у других и возможно погоня за оригинальностью. Не скажу, что всё это про мой пост, просто пришла идея и захотелось реализовать.

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

( Читать дальше )
  • +2
  • 26 января 2010, 15:51
  • MpaK
  • 9+9

Какой WYSIWYG редактор вы используете в своих веб-продуктах?

Проголосовало: 13. Воздержалось: 3

Маленький опрос для того, чтобы узнать ваши предпочтения, разработчики!
  • 0
  • 26 января 2010, 00:02
  • MpaK
  • 2+2

Как удалить из строки все буквы кроме некоторых?

Иногда возникает задача удалить из строки все символы кроме некоторых. На мой взгляд для этой задачи регулярные выражения в самый раз задуманы.
для Oracle
select regexp_replace('АаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯя','[^кя]','',1,0,'i') from dual;

Для углубления в тему регулярных выражений в Oracle следует почитать это.

для C#

Regex r = new Regex("[^кя]*",RegexOptions.IgnoreCase);
Console.WriteLine(r.Replace("АаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯя", ""));

Для .Net кодеров полезно прочитать — Регулярные выражения в .NET Framework

Как получить имя колонки таблицы на которую мапится свойство NHibernate класса?

How to Get Field's Name from property?

Понадобилось мне получить в runtime имя колонки таблицы на которую мапится NHibernate объект. Вот и наваял хелпер для этого.

public class NHibernateHelper
    {
        private ISessionFactory _factory;
        /// <summary>
        /// Конструктор
        /// </summary>
        /// <param name="factory"></param>
        public NHibernateHelper(ISessionFactory factory)
        {
            if (factory == null) throw new ArgumentNullException("factory");
            _factory = factory;
        }

        /// <summary>
        /// Метод возвращает название колонки таблицы на которую мапится свойство
        /// </summary>
        /// <typeparam name="T">NHibernate класс</typeparam>
        /// <param name="propertyName">Имя свойства</param>
        /// <returns>Имя колонки таблицы</returns>
        public string TableColumn<T>(string propertyName) where T: class
        {
            SingleTableEntityPersister persister = (SingleTableEntityPersister)_factory.GetClassMetadata(typeof(T)); ;
            return persister.GetPropertyColumnNames(propertyName)[0];
        }
    }


Пример использования

Helpers.NHibernateHelper entityHelper = new Helpers.NHibernateHelper(Domain.SessionFactory);
entityHelper.TableColumn<DocumentType>("FormatSerNum");

www.TwiMov.ru как это всё случилось?!

Хотелось бы в этом небольшом тексте рассказать о том как зародилась идея, как рождался код и что имеем на данный момент на моём проекте TwiMov.

Я с детства любил кино, этот сказочный и фантастический мир, где полно совершенно нереальных вещей. Мир не ограниченный ничем, только фантазией автора. Мир который заставляет сопереживать, сочувствовать, понимать. Кино это не настоящая жизнь, это и есть виртуальная реальность.

Так как иногда мне просто хочется, что-то сказать о фильме который я посмотрел, например нападает на меня какое графоманство, что аж не могу в себе это держать и нужно обязательно вылить это на клавиатуре, это как памятка для себя на будущее и еще раз возможность проанализировать фильм, я сажусь за компьютер и пишу рецензию. Удачная она получится или не очень мне не известно и мало волнительно, правило 80/20 всегда в уме. Но хорошие, четкие рецензии с большим количеством мыслей, идей и анализа это удел профессиональных авторов и журналистов, к радости или сожалению я ни один из них. Потому в какой-то момент по одному из топиков на нашем уфимском рок-форуме я понял, что люди не всегда готовы писать крупные рецензии, зато с охотностью вставляют свои «пять копеек». Ну а благо я стараюсь следить за всяческими тендециями в сети, хотя с первого раза и не понял к чему мне Twitter, то в этот раз он с точностью подходил к моим задачам!

( Читать дальше )
  • +1
  • 10 января 2010, 16:00
  • MpaK
  • 7+7

fedora 12

Я давно употребляю линукс, и довольно давно из этого времени — fedora linux (несколько лет назад — fedora core). В конце осени вышел следующий релиз «фетровая шляпа 12 константин», очередной раз решил мажорно обновить. Тем более приключались некоторые глюки в стоящей 11-й версии и вообще накопилось каких-то коллизий с пакетами, каких-то проблем с пульсаудио и прочим, которые создателями решались медленно. Обычно к концу версии по большей части они забивают на заплаты и остаётся ждать нового релиза, где именно эти глюки обычно причёсаны, что не мешает появляться новым, конечно. Ну и в целом — решил переставить на новый комп в этот раз 64-битную версию линукса. Боялся долго, но пора.

Вкратце расскажу о впечатлениях от установки и приведения в божеский вид системы. А также очень кратко о системе, вдруг кто убунтой какой-нибудь пользуется и про другое не знает.

( Читать дальше )

LBook EReader V3

Почитывая сегодня хабр натолкнулся на топик про вещицу, чуть более слабый вариант которой уже больше года как активно использую, а еще один пост заставил меня несколько минут помечтать. Но, как говорится, «вернемся к нашим баранам».



( Читать дальше )