Anton L. Safin: Блог

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

[Решено] Скрипт для бэкапа файлов

3 июля 2009 в 17:08

Внимание! Речь пойдет о резервном копировании файлов на хостинге. Для бэкапа базы данных существует Sypex Dumper, ставший практически стандартом: http://sypex.net/products/dumper/

Привык я к хорошему. Хорошее в моем понимании - это хостинг с доступом к SSH, где можно сделать примерно так:
tar czf backup-090306.tar.gz *
После чего скачать файл gz к себе на локальную машину и спать спокойно.

Но, как говориться, хорошего понемногу. Пришлось на днях установить Drupal на хостинг, где не было ни то что SSH, а даже нормальной админ-панели. Пришлось искать стороннее решение для задачи резервного копирования.

Из всего, что я испробовал, больше всего мне понравился скрипт AlfaUngzipper. По идеологии очень напоминает упомянутый вначале Dumper - всего один файл php, но в нем есть все, что надо, включая фильтрацию файлов по размеру и расширению. Кроме создания бэкапа и, последующего его восстановления, этот "малыш" умеет изменять права доступа на файлы и каталоги.

Для скачивания скрипта необходимо указать имя пользователя и пароль, по которым вы будете получать доступ
к скрипту. Страница для скачивания: http://alfaungzipper.com/ru/download.html

[Решено] Как проверить, включен ли у пользователя JavaScript

2 июля 2009 в 6:01

К вопросу о том, как проверить, включен ли у пользователя JavaScript и, если он отключен, выдать соответствующее сообщение. Готовый код:

"Заглушка" sendmail для xampp

30 июня 2009 в 17:59

Несмотря на то, что мой совет не относится напрямую к Drupal'у, думается, он будет полезен тем, кто тестирует сайты у себя на локальном веб-сервере под Windows.

Drupaler и закладурки

25 июня 2009 в 13:29

Для тех, кому, как и мне, надоело каждый раз при поиске перевода для свежескачаного модуля вручную набирать адрес вида http://drupaler.ru/translate/languages/ru/export?project=views, сделал небольшую закладурку: http://als-studio.ru/tools/drupaler.htm

usefull modules

16 июня 2009 в 13:12

Пост больше для себя - наверное, у каждого друпаловода должен быть такой Smile

Полезные модули, которые могут очень пригодится в дальнейшем. Отбросив практически стандартные Views, CCK и т.п.

User Read-Only

[module=user_readonly]
Позволяет администратору запрещать модификацию полей в пользовательском профиле. Полезно, например, для того, чтобы запретить смену пароля пользователем. Только для Drupal 6.x

LoginToboggan

[module=logintoboggan]
Судя по описанию, очень полезный модуль, который позволяет:

  • Логиниться, указывая e-mail вместо логина (аналог - [module=email_registration])
  • Логиниться сразу после регистрации
  • Показывать форму логина на страницах "Доступ запрещен"
  • Перенаправлять пользователя на произвольную страницу после регистрации и после перехода по ссылке в e-mail'е
  • Показывать произвольное сообщение после входа пользователя

и многое другое

Multistep

[module=multistep]
Модуль добавляет к вашим CCK-формам возможность разбиения на несколько страниц (шагов)

Node Reference formatters

[module=nodereference_formatters]
Позволяет вывести поле CCK Node Reference (связь с нодой) в одном из следующих видов:

  • Fieldset - стандартный drupal'овский fieldset, который можно свернуть, c заголовком в виде названия ноды и "телом" в виде ее содержимого.
  • AHAH link - кнопка с названием ноды. Когда пользователь нажимает кнопку, нода будет показана в указанном поле.

[Решено] Webform: PHP-код в скрытом поле (hidden)

8 июня 2009 в 14:41

Очень удобный и полезный модуль WebForm имеет один недостаток - PHP код (например, для выборки из БД) можно поместить только в поле типа markup, которое не сохраняется в БД и не отправляется на e-mail. Потребовалось мне помещать результат выполнения кода PHP в поле hidden. Немножко хирургического вмешательства, и получился файл hidden_dynamic.inc.

Суть в следующем: после того, как вы положите этот файл в папочку components модуля webform, у вас появится еще один тип поля - hidden_dynamic. По сути, это тот же hidden, но с возможностью установки формата вводимого значения.

[Решено] Модуль Domain - разные Primary links для сайтов. Как?

22 апреля 2009 в 14:53

Подскажите, пожалуйста, как создать разные Primary links для сайтов, используя модуль Domain Access?

На странице модуля написано:
"Domain Menu by canen. Allows each subdomain to use separate primary and secondary links. This feature is native to 6.x.2.0."
То есть вроде как модуль должен позволять использовать различные primary и secondary линки для субдоменов.

В списке блоков для субдоменов есть блоки "Domain primary links" и "Domain secondary links", но он один в один повторяет структуру меню primary links, которое одно для всех сайтов.

Попробовал покрутить модуль Domain Navigation, но, судя по описанию, он просто создает меню со списком доменов:
"The Domain Access: Navigation module is a small module that generates a block of themed HTML with links to the currently available domains used by your site."

И еще один отвлеченный вопрос - не очень понял, зачем в принципе нужен модуль Domain Prefix (Interface for selective table prefixing for use with Domain Access) в составе Domain Access, если все работает и так, в одной базе данных без лишних префиксов.

[Решено] Нужен модуль для связи Term (Taxonomy) и CCK

9 апреля 2009 в 6:50

Нужен весьма своеобразный модуль, позволяющий создавать произвольные типы полей для термина (!) словаря.

Term Fields не подходит, так как в нем создаются поля для словаря в целом, а потом уже в термине им присваиваются значения. Здесь же задача несколько "изощреннее": нужна возможность создания индивидуального набора полей для различных терминов.

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

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

[Решено] Ubercart: Image (field_image_cache) is an inactive image field that uses a Image widget

21 марта 2009 в 17:57

После установки последних версий модулей ubercart, imagecache, imagefield на странице настройки полей для типа "Product" стала вываливаться ошибка:
This content type has inactive fields. Inactive fields are not included in lists of available fields until their modules are enabled.
Image (field_image_cache) is an inactive image field that uses a Image widget.

В общем, час на drupal.org, и было выяснено, что
The issue is caused by the modification of imagefield field type which in the latest beta has changed from "image" to "filefield".
Т.е. проблема возникает из-за того, что в последней версии imagefield тип поля был изменен с "image" на "imagefield". Там же есть и патч, исправляющий это.

Правда, после применения патча у меня ничего не изменилось. Помогла переустановка модулей uc_product, imagecache и imagefield при помощи devel.

Буду рад, если эта информация поможет кому-то.

Как грамотно переопределить функцию стороннего модуля

19 марта 2009 в 9:19

Возникла необходимость изменить (а, точнее, исправить) одну функцию в стороннем модуле - а, конкретнее, функцию _taxonomy_menu_page в модуле taxonomy_menu. Есть ли возможность сделать это, не внося правки в файл taxonomy_menu.inc - может быть, как-нибудь преопределить эту функцию в своем модуле?

Делаем регулярный бэкап БД под Windows

17 февраля 2009 в 6:40

Так как возник соответствующий вопрос в форуме, краткое описание того, как можно делать регулярный бэкап базы данных под виндой (если, к примеру, вы отлаживаете сайт на Denwer'е).

Создаешь bat'ничек (например, backup.bat) примерно с таким содержанием:

mysqldump -uroot -hlocalhost -pmypass my_database > my_database.txt

root - имя пользователя, mypass - пароль, my_database - имя базы, которую надо бэкапить. Только вот не помню, есть ли в denwer'е по умолчанию mysqldump, поэтому см. прикрепленный файл.

Для того, чтобы сделать регулярный бэкап с текущей датой, создаем файлик todaybackup.bat:

@echo off
for /f "tokens=1-3 delims=." %%i in ("%date%") do (
call backup.bat %%k-%%j-%%i
)

Если нужен более частый бэкап (к примеру, раз в час), для формирования текущего времени можно использовать утилиту curtime32, тогда содержимое этого bat-файла вообще будет состоять из одной строки:

curtime32.exe "backup.bat $y$M$d$h$m$s" /exec

В нашем первом файлике, backup.bat, соответственно, меняем my_database.txt на my_database_%1.txt

И - финальный шаг - настраиваем запуск нашего bat'ника с необходимой периодичностью в "Назначенных заданиях" MS Windows или, если хочется показать свою продвинутость, в nnCron

[решено] Динамическое формирование поля select модуля webform на основе выборки из базы данных (PHP)

19 января 2009 в 12:53

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

Задача: необходимо, чтобы поле select модуля webform формировалось динамически на основе выборки из БД. Выборку формирует некая функция в файле template.php:

function get_emails_list($array=false) {
  $sql="SELECT
  content_type_city.field_email_call_value,
  term_data.name
FROM
  term_node
  INNER JOIN node ON (term_node.nid = node.nid)
  INNER JOIN term_data ON (term_node.tid = term_data.tid)
  INNER JOIN content_type_city ON (node.nid = content_type_city.vid)
WHERE
  (node.`status` = '1')
GROUP BY
  content_type_city.field_email_call_value,
  term_data.name
ORDER BY node.sticky"
;
    $result = db_query($sql);
    while ($city_r = db_fetch_object($result)) {
                $output.=$city_r->field_email_call_value.'|'.$city_r->name.chr(10);
        }
    return $output;
}

Т.е. функция возвращает список значений вида value|name, разделенных символом переноса строки. Теперь задача заставить webform понимать данные, возвращаемые этой функцией.

На drupal.org есть хак, позволяющий вставлять в поля webform код на PHP: http://drupal.org/node/297989. Вроде бы, все хорошо, но хак этот работает только для простых полей - вроде "значения по умолчанию". Происходит это потому, что хак изменяет функцию, работающую уже после того, как поле разбито на составляющие и отфильтровано - а в случае с e-mail это означает, кроме всего прочего, то, что будут обрезаны символы "<" и ">". В общем, нифига это не работает - и точка.

[решено] Изображения на сайте, загруженные через модуль image, не видны анонимным пользователям (гостям)

16 января 2009 в 11:36

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

Прошерстив форум, я наткнулся на решение - нужно в настройках управления доступом отметить для гостей пункт "смотреть загруженные файлы" модуля upload. Готовился уже праздновать победу, но не тут-то было. Не показываются картинки, хоть убей! И тут начались пляски с бубном вокруг кэша, прав доступа на файлы и папки и т.д.

В итоге проблема решилась совершенно недоступным для моего понимания способом: нужно было кроме прав доступа для модуля upload так же отметить для гостей пункт "view imagefield uploads" модуля imagefield, хотя cck и в частности imagefield в этом типе материалов вообще никак не используется. Чудны дела твои, Господи...

[решено] Как дать права на добавление пользователя в группу?

16 декабря 2008 в 13:48

Предполагается сделать на сайте раздел с платным размещением. Вроде все просто - создаем отдельную группу пользователей (к примеру, "vip"), даем ей права на создание материала определенного типа. Далее схема следующая:

1. Человек регистрируется и оплачивает n-ную сумму (детали оплаты не интересуют)
2. Менеджер (человек из группы "managers") добавляет этого человека в группу "vip"

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

Есть варианты?

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

21 августа 2008 в 4:35

Есть задача: дать пользователям определенной группы права на добавление/удаление/изменение терминов только одного словаря в таксонометрии, к остальным доступа быть не должно.
Возможно, решается элементарно, но я уже всю голову сломал. Может кто-нибудь сталкивался с подобными задачами?