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

Views block id

5 декабря 2014 в 6:59

Почему некоторые блоки созданные модулем Views имеют нормальную delta: например my_news, в то время как у некоторых других delta выглядит так: 6afc54f4df9bf9a3666f2387918fac28.

А это потому, что модуль Block (block.module) определяет максимальную длину delta в 32 символа. Но поскольку дельта в модуле Views формируется из названий представлений (а они могут быть более 32 символов), то delta формируется как хэш md5. Ниже кусок кода, который из реализации Views (views.module)

<?php
function views_block_info() {
...
// block.module has a delta length limit of 32, but our deltas can
  // unfortunately be longer because view names can be 32 and display IDs
  // can also be 32. So for very long deltas, change to md5 hashes.
  
$hashes = array();
?>

Вывод поля, в зависимости от значения - настройки через админку

27 июня 2014 в 17:24

Задача
Есть тип материала Автомобиль. Он содержит поле с ценой - числовое поле. Нужно в зависимости от значения этого поля изменять его вывод.

Например если поле цена не заполнено, или имеет значение 0, то должно выводиться "Договорная цена", а если цена указана и она больше 0, тогда выводим эту цену.

На сайте использутся Display Suite и Rules. Создавать новый модуль не желательно.

Модуль ds_forms должен быть включен, что бы можно было управлять отображением полей в форме редактирования ноды.

Решение

str_replace в модуле token

1 апреля 2014 в 18:44

Привет!

Возникла проблема, может кто-то поможет разрешить.

Есть вот такой код

<?php
  $text 
"[block:views:test-test_bxslider] [block:user:online] [block:node:recent]";
  
  
$tokens = array('[block:views:test-test_bxslider]''[block:user:online]''[block:node:recent]');
  
$values = array('html-1''html-2''html-3');

  foreach(

$tokens as $key => $token){
    
$text str_replace($token$values[$key], $text);
  }
?>

'html-1', 'html-2', 'html-3' - подразумевается какая-то разметка.

В прикреплённом файле разметка для [block:views:test-test_bxslider]

Так вот, первая же замена заменяет просто всё содержимое $text.

Обновления сайта - кто как...

5 января 2014 в 21:53

Периодически приходится решать один и тот-же вопрос - как обновить сайт на боевом сервере. Я имею ввиду не обновления ядра и/или модулей, а о обновления настроек сайта. Например: типы материалов, настройки их отображения, представления, переменные, блоки и т.п.

В общем, может кто-нибудь поделится своим опытом, расскажет как это делает сам, какие дополнительные модули использует, как синхронизирует версии БД с версиями кода.

Я использую модуль Features для переноса настроек (однако он не на 100% решает задачи переноса настроек) + то, что Features не может переносить, прописываю в модуле созданном Features вручную. БД храню в git вместе с кодом. Перед каждой фиксацией изменений соответственно делается дамп базы.

План обновлений примерно такой:

Entity или Field multicolumn

21 марта 2013 в 17:56

Привет всем.

Есть некий тип материала, у которого набралось со временем куча полей (порядка 30). Понятное дело, при выборке ноды с таким количеством полей запрос выглядит мягко говоря странно - целый ворох JOIN`ов.
90% полей заполняется всегда. Т.е. не бывает пустых не заполненных полей.
Логично было бы создать новый тип Entity с набором свойств, перекрывающим потребности.

Т.е. одна запись в таблице, содержала бы все необходимые данные. Тогда и производительность вырастет, и кол-во таблиц БД заметно сократиться.

Но, есть ещё один вариант - создать комплексное поле. Определить новый тип поля, со всеми требуемыми полями (смешно получилось:)).

В общем надеюсь достаточно понятно изложил мысль:)

content_type - как создаются таблицы?

2 февраля 2012 в 13:30

Добрый день!

Создал тип материала, с набором CCK полей. В базе появилась таблица content_type_instok (instok - название типа материала), с набором полей почти соответствующим тем полям, которые я насоздавал для материала, но для некоторых полей создались отдельные таблицы. В таком виде сайт работает на прод. сервере уже более года.
Теперь мне потребовалось немного изменить набор полей в этом типе материала, и сделав это на тестовом сервере, я обнаружил, что набор полей в таблице content_type_instok сильно сократился, и там остались только nid и vid поля. Вопрос. что повлияло на разделение таблиц?

Пока писал вопрос, понял что произошло. Возможно у кого-то возникнет такой же вопрос, так что напишу сразу и ответ. (Если я ошибаюсь, то просьба поправить)

Ubercart в мультисайтинге

31 октября 2011 в 22:00

Добрый день уважаемые!
Такая задача - есть несколько сайтов, все они расположены на одном домене второго уровня и у них различные поддомены.
site_1.main_site.ru
site_2.main_site.ru
site_3.main_site.ru
site_4.main_site.ru

Сайты пользуются одной базой, у таблиц каждого сайта разные префиксы. Однако есть и общие таблицы, например users, role, sessions, authmap... т.е. у них общая авторизация.

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

Так вот, может быть есть у кого-то опыт с подобным использованием ubercart (предполагается использовать его, но может есть что-то более подходящее).

Какие таблицы можно шарить для разных сайтов, какие лучше не трогать?

Спасибо:)

валидация форм

28 апреля 2011 в 14:10

Как реализовать валидацию формы для блока. Форма сабмитится через ahah. Код такой:


<?php

/**
 * Реализация hook_menu() 
 */
function cost_calculator_menu(){

  

$items['services/cost-calculator/calculate'] = array(
    
'page callback' => 'cost_calculator_calculate',
    
'access arguments' => TRUE,
    
'type' => CALLBACK_ITEM,
  );

  return 

$items;
}

/**
 * Реализация hook_block()
 */
function cost_calculator_block($op 'list'$delta 0$edit = array()){
  switch(
$op){
    case 
'list';
      
// Блок расчёта стоимости таможни
      
$blocks['customs'] = array(
        
'info' => t('Расчёт таможенной пошлины.'),
        
'cache' => BLOCK_NO_CACHE,
      );

      return 

$blocks;
    case 
'configure':
      return 
$form;
    case 
'save':
      return;
    case 
'view':
      
$block['content'] = drupal_get_form('calculator_form'$delta);
      return 
$block;
  }
}

function 

calculator_form(&$form_state$delta){
    
$foem['sum'] = array(
      
'#type' => 'textfield'
    ); 
 
  
$form['calculate-button'] = array(
    
'#type' => 'submit',
    
'#value' => t("Рассчитать"),
    
'#ahah' => array(
      
'path' => 'services/cost-calculator/calculate',
      
'wrapper' => 'calc-result',
    ),
  );

  

$form['calc-result'] = array(
    
'#value' => '&nbsp;',
    
'#prefix' => "<div id='calc-result'>",
    
'#suffix' => "</div>",
  );

  return 

$form;
}

// эта функция не вызывается никогда
function calculator_form_validate(&$form, &$form_state){
    
$va 2;
}

function 

cost_calculator_calculate(){?>

Спамеры: как с ними бороться?

15 апреля 2011 в 23:31

Добрый день уважаемые. Случилось вот что. Кто-то, зашёл на мой сайт как гость, и разместил кучу левого контента на моём сайте. Обновления все устанавливаются регулярно, Единственное что не обновлено WebForms. Возможно кто-то сталкивался с подобным... как такое могло произойти? И что с этим делать?

Как создать задачу выполняемую по расписанию

24 марта 2011 в 14:03

Как создать свою задачу для регулярного выполнения?
Например, есть модуль, который решает некую задачу, и требуется его запускать каждые 3 часа, и другой модуль, который требуется запускать раз в сутки.
Как в Drupal это делается?

Просто мне не очень понятна идеология.
Например есть такая запись
0 * * * * wget -O - -q -t 1 http://www.example.com/cron.php

[РЕШЕНО] Валидация формы настройки блока

19 марта 2011 в 19:59

Доброго всем.

У меня такой вопрос. Создаю блок, для него нужна форма настроек параметров.
создаю её, а каким образом происходит валидация формы в этом случае?
form_name_validate - не вызывается, а сразу вызывается hook_block с параметром $op = save.

Подскажите как проверку форме устроить?

[РЕШЕНО] CCK + Views

24 февраля 2011 в 15:42

Здравствуйте!
Как вывести в Views ноду со всеми добавленными к ней CCK полями?
То есть, CCK поля могут добавляться со временем или удаляться, и при этом Views должен выводить только существующие поля.

Спасибо.

[РЕШЕНО] node privacy byrole

31 декабря 2010 в 9:25

С Новым Годом!

Установил модуль node privacy byrole, он обновил привилегии для всего содержимого, и теперь оно вё не доступно. Как массово пересоздать нужные привилегии? У меня материалов полторы тысячи - для каждлго пересоздавать - не вариант.

[Решено] Почему текст выводится не так, как отформатирован в редакторое?

4 декабря 2010 в 17:41

Почему, текст введёный в редакторе содержимого, на результирующей странице выводится без стилей?
Например если я задаю при редактировании style="text-align:center", на странице этот атрибут отсутствует.

Что делать?

[Решено] При выводе ноды, теги H1 - H6 заменяются на тег P

1 декабря 2010 в 19:03

Доброго всем!

Такая проблема, пишу в содержимое ноды например следующее

Блоки с зависимым контентом

28 ноября 2010 в 18:25

Как сделать блок, что бы его содержимое зависило от текущей ноды?

То есть например есть нода с информацией о автомобиле, а в блоке должны быть ссылки на связанные с текущей нодой материалы.

[Решено] Термины таксономии и AutoPath

25 ноября 2010 в 15:47

Если на странице есть поле типа Content Taxonomy Fields.
При создании материала (комплектация авто), выбираются термины из некоторого словаря (несколько уровней терминов).
Например: Audi->A5->Base (последний термин это комплектация)
Т.е. Audi это родительский термин для A5, который в свою очередь родитель для Base

Так вот, как можно настроить автоматические пути для ноды таким образом, что бы url представлял следующее:
audi/a5/base

Может есть какой-нибудь специальный модуль для таких вещей?

Спасибо.