• Как посадить свой сайт на CMS?

    Hesed
    @Hesed
    1. Берёте любую понравившуюся CMS. Например, Joomla или Wordpress.
    2. Разбираетесь какое-то время с архитектурой и основными понятиями - что такое компонент, модуль, плагин. У каждой CMS свой набор понятий, нужно просто привыкнуть.
    3. Берёте урок по созданию шаблона с нуля с помощью Dummy Template (пример) или без него. И переносите свёрстанный на HTML+JS+CSS сайт в CMS
    Ответ написан
    Комментировать
  • Yii debug кто чем пользуется?

    Hesed
    @Hesed
    Ответ на вопрос "кто чем пользуется": для первого Yii есть хороший порт дебаг-тулбара из второго: гитхаб, packagist.
    Ответ написан
    Комментировать
  • Как создать класс с "глобальными константами"?

    Hesed
    @Hesed
    Если создавать класс, который будет хранить все параметры конфигурации, то зачем его делать абстрактным? Вы собираетесь от него наследоваться и он будет хранить какие-то абстрактные методы, обязательные для переопределения? В таком случае, почему он называется GlobalConfig?

    Если речь идёт о смене архитектуры приложения, то с неё и надо начинать. Отвяжитесь от констант, они тут (насколько я могу судить по условию) создают больше проблем. Начиная работать с ООП, пожалуй, проще будет создать что-то типа синглтона, который будет подгружать конфигурацию в какой-либо объект или массив. Нарисуйте прототип архитектуры на бумаге с областями видимости и контекстом и не придётся проклинать объектно-ориентированный подход.
    Ответ написан
  • Как узнать кол-во изменённых строк в yii?

    Hesed
    @Hesed
    Критерий "on duplicate key update" есть только в MySQL (и форках) и его не шибко хорошо использовать, равно как и хардкодить SQL-запрос, когда есть DAO/AR. Если по существу, то "on duplicate key update" согласно официальной документации возвращает 1, если ряд был вставлен и 2, если обновлён. Поскольку это поведение самого MySQL, то средствами Yii это не обойти.

    Для решения задачи, я бы пересмотрел само выражение и подход к написанию запросов. Например:
    // Ищем, существует ли запись с ключом $id
    $model = MetaModel::model()->findByPk($id);
    
    // Если записи нет, мы будем делать insert
    if(!$model) {
        $model = new MetaModel();
        // Присваиваем атрибуты. Позаботьтесь о том, чтобы массив $attrs содержал их
        $model->attributes = $attrs;
        $res = $model->save();
    }
    else {
        $res = Yii::app()->db->createCommand()
            ->update('{{table}}',        // название таблицы
                array(
                    'meta_val'=>':meta', // какое поле
                ), 
                'id=:id',                // where id = ...
                array(
                    ':id' => $id,        // param binding
                    ':meta' => 'blablabla'
                )
            )
            ->execute();
    }
    
    echo intval($res).' rows affected';


    Код написан вслепую и не тестировался. Его однозначно необходимо заточить под свои нужды, я лишь предлагаю свой вариант. Более громоздко? Да, но мы:
    • избавляемся от привязки к MySQL;
    • от довольно пагубной привычки писать "чистый" SQL, когда в нашем распоряжении есть такие инструменты, как ActiveRecord и конструктор запросов
    • приучаемся использовать param binding, что, впрочем, не избавляет от необходимости sanitize'ить данные


    P.S. Это решение "в лоб", требующее минимально менять существующий код. По-хорошему, конечно, такие задачи надо решать до запроса на уровне сценариев. Или навешивать behavior.
    Ответ написан
    3 комментария
  • Почему в IE9 и в старой Opera на сайте ссылки не жмутся?

    Hesed
    @Hesed
    Пользуются :)
    Всю страницу для Оперы закрывает <div id="openModal" class="modalDialog"> и <div class="userPanel">. Оба в глазах Оперы находятся поверх всего сайта и имеются display: block. Маскировка под Firefox ничего не даст - это "особенность" вёрстки. Можно писать userscript, который переопределит поведение элементов сайта, но, к сожалению, стоит признать, что сайтов, которые некорректно работают в 12-й опере будет становиться всё больше.
    Ответ написан
  • Какой ноутбук посоветуете?

    Hesed
    @Hesed
    Acer Timeline Ultra M3-581. В режиме написания кода время жизни батареи будет около 6 часов.
    Ответ написан
  • Выбор slim клавиатуры в стиле лэптопа

    Hesed
    @Hesed
    Logitech UltraX. На данный момент, увы, снята с производства, но запасы еще остались. Закупились на фирму впрок, альтернатив не нашли.
    Ответ написан
    Комментировать