g78knl6cvxf0: Блог

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

Drupal 8. Entity, мы с тобой одной крови

16 февраля 2016 в 0:29
9

Drupal 8. Entity, мы с тобой одной крови

– Все объекты Drupal 8 - Entity.
– Но ведь материалы, пользователи, таксономия, комментарии – они же уже были Entity еще в 7-ке.
– Все - значит все.

Views - разное количество записей в зависимости от номера страницы

4 мая 2013 в 15:17

Иногда очень хочется (особенно если ты заказчик, а не разработчик), сделать так, чтобы количество записей, выводимых на странице с помощью Views, зависело от номера страницы.

Например: на первой странице - одна запись (чтобы не навязывать их пользователю), а на остальных - по четыре (чтобы не нужно было постоянно жмякать "далее").

Или так: на первой - 3, на второй - 10 (если пользователю интересно, значит покажем еще больше), на остальных по 20 (для фанатов, осиливших больше двух страниц).

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

Грамотная настройка прав доступа к файлам и папкам

2 апреля 2013 в 21:23
1

Обновлял сайт на хостинге "Джинс" до версии 7.21 и напоролся на целую череду проблем:

При обновлении модулей:

Обновление модулей и тем требует FTP доступа на ваш сервер
Updating modules and themes requires FTP access to your server

При включении агрегации css/js:

Warning: file_put_contents() [function.file-put-contents]:
Filename cannot be empty in file_unmanaged_save_data()
(line 1903 of includes/file.inc).

Тех. поддержка была немногословной: https://www.jino.ru/support/faq/ftp/

Сверился с настройками прав на другом сайте (размещенном на ит-патрол), вроде все совпадает, но там все работает без ошибок.

Content Access на этапе создания материала

21 января 2013 в 3:02

Content Access позволяет разрешить доступ к странице только указанным группам пользователей. Но почему-то это можно сделать только после того, как создан материал, зайдя в его редактирование.

[Решено] Нежелательное автосохранение материала

9 января 2013 в 21:38

Все было хорошо. Но пару дней назад появилась беда.

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

Переход на Просмотр страницы не происходит, но кнопки для добавления изображения пропадают, а на попытку повторного сохранение пишет:

"Содержимое этой страницы было изменено другим пользователем, или вы уже сохранили изменения, используя эту форму. В результате ваши изменения не могу быть сохранены."

Применение image style для изображений внутри текста

8 января 2013 в 17:23

Image style - клёвая штука, которая позволяет автоматически трансформировать (резать, вертеть, масштабировать и т.д.) изображения. Когда изображения находятся в отдельных полях, применить к ним стиль легко. А вот что делать, когда хочется стилизовать некоторые изображения расположенные внутри текстового поля?

Например, есть такое содержимое:

и хочется закруглить одно из его изображений. Как раз есть подходящий стиль, но как его сюда прикрутить? Искал-искал, но чего-то не нашел Sad Кто знает - подскажите, пожалуйста.

Пока сделал так:

1. к нужному изображению добавляется класс image-style--НАЗВАНИЕ_СТИЛЯ

Решение auto_nodetitle warning

28 августа 2012 в 22:48

Модуль Automatic Nodetitles нужен для автогенерации заголовков нод (пожалуйста)

Но при его использовании раз от раза материал отказывается сохранятся, выдавая:

Warning: htmlspecialchars() [function.htmlspecialchars]: Invalid multibyte sequence in argument в функции check_plain()
...
PDOException: в функции drupal_write_record()

В issue проблема решается добавлением в модуль дополнительных функций экранирования и подмены.

Но мне это не помогло. Даже на основе текста без спецсимволов, заголовок иногда генерировался, иногда нет.

Перестал нормально работать модуль metatag alpha5

5 апреля 2012 в 11:59

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

Проверил работу на чистом сайте - тоже самое. Отключал все глобальные настройки - не помогает.

Подскажите, пожалуйста, в чем может быть дело.

Свои токены

5 февраля 2012 в 17:43

Есть отличный модуль Custom Tokens. С его помощью можно клипать собственные токены (/admin/structure/token-custom), например для использования при формировании пути в pathauto.

Пример 1.
Есть тип материала "Новость" с полем, где указывается дата, с которой эта новость связана.

Цель: выводить новость по пути /news/year/month/day/art-nid

Решение:

1. Создать токен:

Token type: Материалы [needs:node]

Код:

<?php
$fieldDateNews 
$data['node']->field_date_news['und'][0]['value'];
$aDateNews getdate($fieldDateNews);
return 
$aDateNews['year']. "/" $aDateNews['mon'] . "/" $aDateNews['mday'];
?>

2. Снять в настройка удаление "/"

Вывод заголовка в несколько строк

22 января 2012 в 18:23
1

Чем длиннее заголовок материала, тем больше вероятность того, что он выведется в несколько строк самым неправильным образом.

Например, заголовок "Программа семинара «Роль людей, которые умеют что-то делать на жизненное становление людей, который не умеют ничего» (январь - февраль 2012). Логически вывести не так:

Программа семинара «Роль людей, которые умеют что-то
делать на жизненное становление людей, который не умеют
ничего» (январь - февраль 2012)

а вот так что-ли:

Программа семинара
«Роль людей, которые умеют что-то делать
на жизненное становление людей, который не умеют ничего»
(январь - февраль 2012)

Выбор изображений через imce с сервера для filefield

22 января 2012 в 16:28

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

Существует модуль FileField Sources с поддержкой IMCE.

Для этого при настройке поля нужно во вкладке FILE SOURCES отметить флажком IMCE file browser, а также включить в IMCE FILE BROWSER SETTINGS режим Full:... если нужно предоставить возможность выбирать изображения из любой папки.

Все хорошо. В чем беда? В том что это все глючно работает!(

Автор imce написал специальный патч для filefield_sources. Т.е. применять его надо именно для filefield sources, а не imce.

Собственные классы для тегов ul в меню

22 января 2012 в 1:26

При выводе меню друпал добавляет к его тегам различные классы. Щедро так добавляет, и в тег li, и в тег a, а вот в "ul" - нишиша. Точнее добавляет один шиш - "menu", не зависимо от того, насколько этот ul вложен в другие.
Между тем, очень много скриптов по выводу менюшек завязаны на специальных (уникальных) метках тега ul. Особенно это касается корневого (первого, главного, начального) UL.

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

http://www.drupal.ru/node/74071
http://www.drupal.ru/node/68859
http://www.drupal.ru/node/65035
http://www.drupal.ru/node/22932#comment-215099
...

В чем же сложность? А в том, что обертку пунктов меню производит вот эта функция

<?php?>

Путь к списку новостей состоящий из года/месяца/дня

16 января 2012 в 22:40

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

новости/2012/01/04

получать список новостей за указанный день, и аналогично получать за месяц (новости/2012/01), год (новости/2012), и все (новости),

Вроде бы задача полезная, но вот сколько не искал, а решений не нашел. Точнее для друпал 6 есть похожие трюки, но вот с контекстными фильтрами как ни тыркаюсь - не слушают.

Максимум, чего удалось добиться, это новости/2012-01-04, и они бы меня тоже устроили (ладно уж, раз не умею, то не гордый), но у них постоянная точность, т.е. либо с точностью до дня, либо до месяца, либо до года.

Отключение css для определенных пользователей

15 января 2012 в 2:06

Кроме стилей из темы в друпале подключается еще пара десятков других стилей, связанных с модулями и самой системой. И если администратору они нужны, то пользователь прекрасно обойдется и без них (ведь так?).

В 7-ой версии это делается с помощью hook_css_alter.

Беда только в том, что почему-то везде где я видел этот прием, стили отключаются для всех - и админов и пользователей.
Но ведь пользователи не равны!
И если админу нужно оставить стиль модуля Administration menu, то зачем из-за этого страдать пользователю (или наоборот).

[Решено] Свои шаблоны в CKEditor

29 декабря 2011 в 20:17

Здравствуйте. Помогите, пожалуйста решить проблему которая застала меня в расплох(

В редакторе CKEditor можно использовать уже готовые шаблоны

Meta tags, taxonomy term и Views

16 декабря 2011 в 4:04

"Это термины таксономии, а это вьюхи, которые выводят термины таксономии, а это метатеги, которые не хотят выводиться в терминах таксономии, которые выводятся вьюхами.."

Существует уже много тем по этой проблеме:
http://www.drupal.ru/node/67860
http://www.drupal.ru/node/63621
http://www.drupal.ru/node/40720
http://www.drupal.ru/node/21670
и т.п.

Поэтому, для тех, кто не нашел решения предлагаю, а для тех, кто разобрался прошу обсудить следующее решение:

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

<?php
function add_metatag($name, $content){
           $meta = array(
                '#type' => 'html_tag',
                '#tag' => 'meta',
                '#attributes' => array(
                    'name' => $name,
                    'content' => $content,
                )
            );
      drupal_add_html_head($meta, 'meta_'.$name);
}

$enitity_id=arg(2);
$enitity_type=arg(0)."_".arg(1);

$metatags = db_query("SELECT entity_id, data FROM {metatag} WHERE entity_type = :type AND entity_id = :ids", array(
      ':type' => $enitity_type,
      ':ids' => $enitity_id,
    )
)->fetchAllKeyed();

$metatags = array_map('unserialize', $metatags);
//dsm($metatags);

if(count($metatags["$enitity_id"]) > 0){

   if(isset($metatags["$enitity_id"]["description"])){

Разные логотипы для разных разделов сайта

4 ноября 2011 в 1:10

Помогите, пожалуйста, решить такую задачу:

Сайт состоит из нескольких разделов и подразделов

Раздел1
-подраздел1
-подраздел2
---подподраздел1
-подраздел3
Раздел2
-подраздел1
-подраздел2

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

Логотип - это набор из нескольких изображений.

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

Нашел несколько похожих тем:
http://www.drupal.ru/node/14431
http://www.drupal.ru/node/26841
http://www.drupal.ru/node/68259
http://www.drupal.ru/node/51997
- но не знаю как их применить к этой задаче

Если правильно понял, то тут http://drupal.stackexchange.com/questions/13205/add-a-unique-banner-imag...
предлагается создать словарь таксономии, повторяющий разделы меню. Завести для логотипов отдельный тип материала, состоящий из полей для изображений, а также таксономии. В каждую страницу отображающуюся в разделах тоже добавить ссылку на таксономию. Потом создать views-блок, с фильтром "Логотипов" по термину таксономии из материала страницы.

Но как узнать какой именно тип материала будет отображаться на текущей странице, получить доступ к значению его поля таксономии и использовать его в фильтре "Логотипов"? И правильно ли это, назначать таксономию для каждой страницы, а не для разделов, в которых они находятся.

Заранее спасибо за любые попытки помочь

Создание страниц для печати с помощью модуля Printer

9 июля 2011 в 21:01

Подключил для создания печатной версии страниц модуль Printer.
Но автозапуск печати не заработал. Здесь предложили два варианта:
1. заменить в файле \sites\all\modules\print\print.pages.inc строку

<?php
$print
['sendtoprinter'] = $print_html_sendtoprinter "<script type='text/javascript'>Drupal.behaviors.print = function(context) {window.print();$window_close}</script>" '';
?>

на

<?php
$print
['sendtoprinter'] = $print_html_sendtoprinter "Drupal.behaviors.print = function(context) {setTimeout(\"window.print();$window_close\",1000);}" ''
?>

но это не помогло.

2. Вбить яваскрипт, который будет запускать печать, после загрузки страницы:

<body onload="window.print()">

помогло) Но лучше эту замену делать не в боди, а там, где это делается в первом варианте.
И еще, если установить закрытие страницы после печати, то страница закрывается не успев послать команду на печать.
Для того чтобы это исправить, вызывать закрытие стоит после того, как страница получит фокус (отобранный диалоговым окном для распечатки).

Т.е. в результате в файле \sites\all\modules\print\print.pages.inc нужно заменить строку

<?php?>

Подлкючение плагина OCUpload в CKEditor

7 июля 2011 в 18:04


Проделал все, что было сказано в readme по установке OCUpload. Но в редакторе CKEditor кнопка так и не появилась. Внимательно приглядевшись, заметил вкладку Plugins в разделе EDITOR APPEARANCE, где необходимо отметить флажок напротив данного плагина. Кстати, там же есть и IMCE, но он работает даже в "не отмеченном состоянии")

Замена названий скачиваемых файлов

7 июля 2011 в 17:35

Замена названий скачиваемых файлов:

Цель: при сохранении файла по умолчанию подставлять в название содержимое атрибута title
т.е. например, чтобы по нажатию на ссылку
<a href="proba.zip" title="Пробный архив">скачать</a>
, предлагало сохранить "Пробный архив.zip"
и так для любого интересующего расширения (doc, pdf, jpg ..)

Решение: на самом деле решение к друпалу имеет очень небольшое отношение, т.к. почти не знаю его. Поэтому, наверняка, оно не оптимальное и я буду рад любым советам по его улучшению. С другой стороны, им могут воспользоваться такие же новички (и не только для друпала).

Краткий алгоритм:

  1. Пройтись по все ссылкам в интересующем месте, выбрать те, что ссылаются на файлы типа zip, rar, doc и т.п. Отлавливать клики по ним, отменяя стандартное действие, вместо которого отправлять в php-файл путь ссылки и нужное название
  2. В php-файле настроить header-ы на загрузку
  3. Привязать все это к друпалу

Первый пункт (javascript):

window.onload = function(){              
               
                //взять все ссылки, из содержимого статьи
                var links = document.getElementById("content").getElementsByTagName("a");

                //перебрать все найденные ссылки
                for(var i=0;i<links.length;i++){
                                        $href= links[i].getAttribute("href");
                                       
                                        //если у ссылки есть путь
                                        if($href!=null && $href!=""){
                                       

CKEditor изменить способ позиционирования таблиц

5 июля 2011 в 22:08

В CKEditor есть возможность создавать таблицы, а так же размещать их по-центру. Беда в том, что для этого используется атрибут align="center", который и устарел и не работает. Можно ли заменить эту вставку на style="margin:0 auto"?
Убил день, на поиск решения такой, вроде бы, насущной проблемы. Тут вроде бы что-то похожее:

Заменить
table[align=center]
на
div[style="text-align: center"] > table[style="margins: auto"]

но такой строчки не нашел

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

Пока, вбил в стиль темы для всех таблиц margin: auto.

Подскажите, пожалуйста, нормальное решение.