Блог пользователя - Mirocow

Платформа для тестирования

9 августа 2013 в 11:11

simplytest.me

Замечательный сервис (simplytest.me) для автоматической сборки и тестирования CMF Drupal и Contrib модулей.
Пару минут, несколько настроек. И готова сборка Drupal.

Import KIT - 1С + Drupal Ubercart/Commerce и не только ;)

30 июня 2013 в 0:36

API реализующий функционал импорта данных из любого формата (CML, XML, CSV, TXT) в Drupal.
Состоит из управляющего модуля importkit и дочерних модулей, реализующих функционал хранения и удаления данных.
Модуль построен на патерне Observer с применением фабрики классов. Основной принцип взаимодействия с импортируемым контентом возложен на ридеры.

Особенности работы с features

2 августа 2012 в 8:05

При работе с features важно не допускать ошибки при работе с Feilds API, инаяе впоследствии разгадать причину некорректного Revert представляет большую сложность.

Некоем случае не заносить в feature поля созданные другими модулями фичи.
С такой проблемой я столкнулся при экспорте полей модуля metatags_quick.

Подробности тут: http://docs.mirocow.com/doku.php?id=blog:2012:08:02

Как назначить тему админ части для отдельного роута

23 июля 2012 в 18:09
// Назначаем след путям тему админ части
function module_name_admin_paths() {
  $paths = array(

Исправление практически всех ошибок Drupal 7

28 июня 2012 в 4:50

Когда поможет:

* Если криво встала тема
* Если надо перенести файлы в модуле
* Если надо перестроить классы
* Если тема не поднялась
* Если изменили меню роут
* Если создали новую функцию или класс
* При разработке тем
* При разработке модулей
* При разработке классов модулей (При использовании auto_load)

Решение:

Создаем файли в корне рядом с index.php. И называем его к примеру fix.php.
Далее запускаем его http://ваш-сайт/fix.php
Скрипт отработает и если увидите Done, то ваш сайт восстановлен


<?php
define
('DRUPAL_ROOT'getcwd());
define('MAINTENANCE_MODE''update');
require_once 
DRUPAL_ROOT '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
require_once 
'includes/common.inc';
drupal_flush_all_caches();?>

check-service.ru

23 декабря 2011 в 18:18

Изюминкой сайта является мощный калькулятор, способный в on-line выполнить сложнейшие расчеты http://check-service.ru/calculator
Да и в целом довольно симпатичная графика.

Проект писался полностью с 0. В проекте написано 5 модулей для админ части. Активно применяются features для обновления логической стороны сайта.

АНОНС Переопределение SQL во Views

5 октября 2011 в 16:39

Статья планируется про возможность программно изменить поведение и выдачу VIews. Про полную или частичную подмену SQL запроса во views.
Тема будет раскрывать внутреннее устройство views. с подробным расписыванием всех хендлеров их свойств и путей SQL запроса. Те формирование SQL от филдов до вывода на sql_build.

Для затравки:

// Группируем подзапросы
$handler->query->where[0]['type'] = 'AND';
// Группируем подзапросы
$handler->query->where[1]['type'] = 'OR';
$handler->query->where[1]['clauses'][0] = "node.uid = ***CURRENT_USER***";
// Избавляем себя от ошибок
$handler->query->where[1]['args'] = array();
// Группируем группы
$handler->query->group_operator = 'OR';

Level: Profi

P/S:
Статья не для таких знаменитых личностей как: RxB (он мастер и подобное ему не интересно)

Восстановление пароля Drupal 7

6 сентября 2011 в 0:49
define('DRUPAL_ROOT', getcwd());

require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
require_once DRUPAL_ROOT . '/' . variable_get('password_inc', 'includes/password.inc');
$admin = user_load(1);
$pass = isset($_GET['pass'])? trim($_GET['pass']): 'pass';
$uid = isset($_GET['uid'])? trim($_GET['uid']): 1;
$name = isset($_GET['name'])? trim($_GET['name']): 'admin';
user_save($admin, array('pass' => $pass, 'name' => $name));
$account = user_load($uid);
if(user_check_password($pass, $account)){
                echo "<pre>";
                echo "Login: {$account->name}\n";
                echo "Password: $pass\n";
                echo "</pre>";
}

Как программно записать картинку в CCK field

9 сентября 2010 в 19:54
        // Формируется картинка
        if(isset($product_data->Картинка)){
          // Занесение картинки в
          $file = new stdClass();
          $file->filename = (string)$product_data->Картинка;
          $path_source = $path .'/'.$file->filename;          
          if(file_exists($path_source)){
            $node->field_image_cache = array();
            $path_destanation = file_create_path().'/'.$file->filename;          
            if(!file_exists($path_destanation) && file_check_directory(dirname($path_destanation), true)){          
              //$path_destanation = file_destination($path_destanation, FILE_EXISTS_REPLACE);          
              file_copy($path_source, $path_destanation, TRUE);
              if($path_source){  
                $file->filepath = $path_destanation;
                $info = image_get_info($path_destanation);
                $file->filemime = $info['mime_type'];
                $file->filesize = $info['file_size'];
                $file->uid = $user->uid;
                $file->status = FILE_STATUS_PERMANENT;
                $file->timestamp = time();
                drupal_write_record('files', $file);
                $_file = array();
                foreach($file as $name=>$option){
                    $_file[$name] = $option;
                }
                $node->field_image_cache[] = $_file;  
              }
            }else{
              $file->filepath = $path_destanation;
              $info = image_get_info($path_destanation);

Подвох в модуле uc_price_per_role

31 мая 2010 в 21:51

Есть такой замечательный модуль uc_price_per_role, и всем он был бы хорош если только не один маленький нюанс.
Как то мне пришлось делать магазин и надо было назначить для определенных ролей свою цену на товар. Была создана роль Оптовик и для этой роли для определенных товаров была выставлена оптовая цена. Я про этот модуль почти уже забыл но тут, как всегда в самый не подходящий момент всплыл глюк, а может и фича этого модуля. Дело в том что если установлена роль, а для нее цена не задана то ставится именно цена назначенная для этой роли, те 0.
В общем как всегда напильник помог.

Начинаю разбираться, что не так. В модуле uc_price_per_role.module есть функция uc_price_per_role_find_price, отвечающая за проверку есть ли для нужной нам роли цена или нет.

function uc_price_per_role_find_price($prices) {
  global $user;

  $enabled = variable_get('uc_price_per_role_enabled', array());
  $weights = variable_get('uc_price_per_role_weights', array());
  asort($weights);

  // Check for a chosen role in the price selection block first.
  if (user_access('access price selection block') && $_SESSION['price_role'] && isset($prices[$_SESSION['price_role']])) {
    return $prices[$_SESSION['price_role']];
  }

  // Otherwise, look for a matching role.
  foreach ($weights as $rid => $weight) {
    if (isset($user->roles[$rid]) && $enabled[$rid] && isset($prices[$rid])) {
      return $prices[$rid];
    }
  }

  return FALSE;
}

Такое поведение вызывает вот эта строка