Hinikato: Блог

Главные вкладки

Исследование механизма плагинов ctools 7.x-1.0. Типы плагинов

28 июня 2012 в 7:34

В исследовании я буду использовать пакет \Myak\Debug и функцию d(), код которой я привожу в конце статьи.

Коротко о плагинах

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

MVC в Drupal. Новый подход.

14 февраля 2012 в 1:52

Была такая тема и она получила продолжение в виде развития модуля controller.

Если раньше надо было объявлять каждый action в отдельном элементе в hook_menu(), то теперь можно объявлять эти же элементы в самих контроллерах. Например:


<?php
namespace MyakShop;

class 

CartController {
  
/**
   * @path => 'shop/cart/add-product'
   * @title => 'Моя корзина с товарами:',
   * @access arguments => array('access content'),
   * @type => MENU_CALLBACK
   */
  
function addProductAction($productId null) {
    if (!
instance('\MyakShop\Cart\CartRepo')->isValidProductId($productId)) {
      return 
MENU_ACCESS_DENIED;
    }
?>

MVC в Drupal. Внедряем Page Controller'ы.

9 января 2012 в 8:43

Хочу поделиться с комьюнити модулем controller, который можно взять здесь. В чем смысл модуля?

Модуль позволяет для каждого УРЛа, который вы определяете в hook_menu() прописать действие контроллера. Для этого есть специальный новый элемент 'action':

Как перевести время? (функция locale())

15 февраля 2010 в 2:03

Всем привет!

У меня такая проблема: делаю в hook_init():

<?php
  
// Пробовал и с variable_set('locale_cache_strings', 0) тоже.
  //variable_set('locale_cache_strings', 1);
  
die(var_dump(locale('@count[2] years''ru')));
?>

и получаю:

<?php
string
(15"@count[2] years" 
?>

При этом запрос:

SELECT * FROM gz_locales_source s
LEFT JOIN gz_locales_target t ON s.lid = t.lid AND t.language = 'ru'
WHERE s.source = '@count[2] years' AND s.textgroup = 'default'

выдает:

'4300','/board/category/2','default','@count[2] years','6.15',NULL,NULL,NULL,NULL,NULL

В файле drupal-6.15-ru.po есть такие строки:

msgid "1 year"
msgid_plural "@count years"
msgstr[0] "@count год"
msgstr[1] "@count года"
msgstr[2] "@count лет"

который был импортирован и русский язык был выбран по умолчанию.

Подскажите, пожалуйста, как мне включить перевод для дат и куда записываются эти строки:

msgstr[0] "@count год"
msgstr[1] "@count года"
msgstr[2] "@count лет"

из файла перевода.

Пропадают все блоки и области при очистке кеша

5 февраля 2009 в 14:29

Привет.
У меня такая проблема. В моем модуле есть такой код, который создает блок:

/**
 * hook_block
 */

function teza_block($op = 'list', $delta = 0, $edit = array()) {
  switch ($op) {
    case 'view':
      $per_page = variable_get('default_nodes_main', 15);
      $content = '<div id="product_list">' . teza_get_nodes(TEZA_PRODUCT_TYPE, 1, $per_page) . '</div>';
      $content .= theme('pager', NULL, $per_page);
      $block = array(
        'subject' => 'Название блока',
        'content' => $content,
      );
      return $block;
     
    case 'list':
      $blocks = array(
        0 => array(
          'info'   => 'Список товаров',
          'cache'  => BLOCK_NO_CACHE,
        ),    
      );
      return $blocks;

    case 'configure':
    case 'save':
      break;
  }
}

Блок этот показывается, все нормально. Но когда обновляется весь кеш системы (например, при нажатии на ссылку обновления всего кеша в модуле devel), пропадают все регионы и блоки в них.

Значит что-то неправильно. После экспериментов установил, что скорее всего проблема как раз в моей функции: когда ее комментирую и обновляю кеш все блоки восстанавливаются. Но функция правильная, вроде ошибки в ней нет. Что не так, я не понимаю.

Уже задолбался искать баг.. Несколько дней убил. Что это может быть??

Переопределение внешнего вида ноды с темы Garland [РЕШЕНО]

26 января 2009 в 16:14

Здравствуйте.
Вот суть моей проблемы: сейчас у меня включено две темы - моя и Garland. Моя тема стоит по умолчанию. Я хочу использовать для сайта тему Garland, но переопределить внешний вид только для одного типа материалов (у меня это product). При этом не хочется копировать содержимое папки garland в папку моей темы.

Проверка формы (как удалить стандартные валидаторы).

8 декабря 2007 в 15:25

Я создал модуль, который добавляет новый тип ноды (объявление, ad). В модуле генерирую форму. После отправки срабатывает моя функция ad_node_form_validate($form_id, $form_values). Но проблема в том, что срабатывают также стандартные обработчики, которые проверяют некоторые поля формы и они выводят сообщения, которые меня совсем не устраивают. Пример сообщений:
* Необходимо заполнить поле Подраздел.
* Необходимо заполнить поле Заголовок.
* Необходимо заполнить поле Текст объявления.
* Необходимо заполнить поле Подраздел.

Как убрать сообщение: An illegal choice has been detected. Please....?

30 ноября 2007 в 14:17

У меня такая задача. Делаю доску объявлений. Есть словарь - "Объявления" и термины в нем.
Например:
Авто
- Легковые
-- Новые
-- Поддержанные
- Грузовые
- Автобусы
- и т. д.
Я создал новый тип контента "Объявления" (ad). Создал блок и кнопку в нем, по которой пользователи смогут добавлять объявления. При нажатии на кнопку пользователь переходит по адресу: doska/node/add/ad. При этом пользователь видит форму с полями:
1. Заголовок.
2. Раздел (здесь появляется select со всеми терминами из словаря "Объявления").
3. Текст объявления.