Скачать модуль для Drupal 6: yandex_weather-6.x-1.1.zip
Скачать модуль для Drupal 7: yandex_weather-7.x-1.1.zip
На прошлой неделе на сайте drupal.ru я увидел активное обсуждение топиков «Яндекс сервисы в одном проекте» и «Встреча по поддержке и продвижению Яндекс-сервисов в Drupal». В представленном списке существующих модулей для интеграции с сервисами Яндекса я не обнаружил модуля про погоду. Я доработал свой модуль, исправил ошибки, дописал дополнительный функционал и решил выложить на сайт для обсуждения сообществом.
Вот так выглядит блок с информером погоды от Яндекса в дефолтной теме.
В настройках блока можно:
указать город по умолчанию;
разрешить/запретить отображать форму выбора города в блоке;
выбирать размер информера.
Текстовые сообщения модуля написаны на английском языке и переведены на русский язык.
Если данный модуль вызовет интерес, то можно переписать его и для Drupal 7. Буду благодарен за любые конструктивные комментарии.
UPD 21.02.2012: Обновил модуль. На прошлой неделе Яндекс обновил свой сервис погоды, поэтому поломалась часть функциональности моего модуля. Сейчас исправил. А также сделал версию модуля под Drupal 7.
Скачать модуль для Drupal 6: yandex_weather-6.x-1.1.zip
Скачать модуль для Drupal 7: yandex_weather-7.x-1.1.zip
Прикрепленный файл
Размер
yandex_weather-6.x-1.1.zip
9.33 кб
yandex_weather-7.x-1.1.zip
9.48 кб
Источник: http://www.drupal.ru/node/76316
Продолжение комментария http://www.drupal.ru/node/74274?page=1#comment-435564
Компания Яндекс заинтересована в продвижении и повышении уровня интеграции своих сервисов с Drupal.
Предлагается провести встречу по вопросам разработки, встреча ориентирована преимущественно на разработчиков.
Яндекс интересует:
Время встречи – 24 января, вторник, 19 часов. Будет забронирована переговорная комната.
Встреча будет проходить в офисе Яндекса
Количество участников (сколько будет людей очно на встрече, сколько будет удаленно). Товарищи, желающие присутствовать удалённо – отпишитесь, пожалуйста, в комментариях.
Так же я считаю, что будет нелишним подготовить вопросы и предложения по использованию API
Очники:
http://www.drupal.ru/username/rxb
(?) http://www.drupal.ru/username/valeratal
(?) http://www.drupal.ru/username/marygold
http://www.drupal.ru/username/stalker-g2
+1 человек с Артёмом
http://www.drupal.ru/username/irbis
http://www.drupal.ru/username/axel
Те, кто будет приходить лично приходят на главный вход в офис Яндекса и говорят, что они на встречу с Друпал сообщестом. Гостей будет встречать Вадим Францев, руководитель группы маркетинга бизнес-решений, с 19-00 до 19-10 на главном ресепшене. Опаздавшие либо к секретарям обращаются и их проводят, либо звонят по телефону +7 495 739-70-00, добавочный 4234.
Переговорка “7.Холмов”
Илья Азаров
http://www.drupal.ru/username/byuro-piyavok
Заочники:
http://www.drupal.ru/username/gagaga
http://www.drupal.ru/username/fortis
http://www.drupal.ru/user/orb
http://www.drupal.ru/username/s-f
http://www.drupal.ru/username/andypost-drupalorg
http://www.drupal.ru/username/validoll
http://www.drupal.ru/username/konstantinkomelin-drupalorg
http://www.drupal.ru/username/restyler
http://www.drupal.ru/username/dd-85
http://www.drupal.ru/username/gde
http://www.drupal.ru/username/enemy
http://www.drupal.ru/username/scotty
http://www.drupal.ru/username/yexel
http://www.drupal.ru/username/cyber
http://www.drupal.ru/username/marygold
http://www.drupal.ru/username/seaji
http://www.drupal.ru/username/higor1968
http://www.drupal.ru/username/plazik
http://www.drupal.ru/username/aleks-84
http://www.drupal.ru/username/lomalkin
http://www.drupal.ru/username/insime
http://www.drupal.ru/username/eagle
http://www.drupal.ru/username/direqtor
http://www.drupal.ru/username/forest-run
http://www.drupal.ru/username/arcadaisb
http://www.drupal.ru/username/glu2006
http://www.drupal.ru/username/splash
Те, кто участвуют удаленно: в 19-10 по МСК должны зайти по адресу http://yandex.adobeconnect.com/drupal/ – здесь будет трансляция, а также чат (вопросы/ответы).
Хотят запись:
http://www.drupal.ru/username/enemy
http://www.drupal.ru/username/softovick
http://www.drupal.ru/username/mak-vardugin
http://www.drupal.ru/username/andruxa
http://www.drupal.ru/username/orion76
http://www.drupal.ru/username/saltan
http://www.drupal.ru/username/6run0
Будут вноситься коррективы
Источник: http://www.drupal.ru/node/74730
Предлагаю обсудить возможность объединить все Яндекс сервисы в одном проекте. На текущий момент на д.о. есть несколько различных модулей для интеграции с яндекс сервисами.
Поиск по сайту дал следующие результаты:
Яндекс.маркет — 6.x.
Яндекс.маркет — 6.x и 7.x(dev).
Яндекс.маркет — в песочнице.
Яндекс.видео — 7.x(dev) new!
Яндекс.метрика — 6.x и 7.x.
Яндекс.метрика — в песочнице.
Яндекс.вакансии — обсуждается.
Яндекс.новости — 6.x(dev) и 7.x(dev).
Яндекс.карты — 6.x(dev).
Яндекс.деньги — 5.x платёжный шлюз для уберкарт.
Яндекс.сервер — в песочнице.
Яндекс.поделиться — в песочнице.
Яндекс.спеллер — в песочнице.
Яндекс.почта — обсуждается.
Яндекс.карты — почти готов.
Яндекс.карты — во вложении.
Site verification — 6.x и 7.x.
Яндекс.маркет — во вложении.
Быстрый заказ — обсуждается.
Яндекс.погода — во вложении.
Если что то забыл, поправьте.
Вот мои причины, для чтобы собрать все сервисы в один проект:
На данный момент большинство из этих модулей находятся «в стадии разработки», а многие попросту брошены без особых шансов получить стабильный релиз для D6 и D7. Я думаю ситуация измениться, если у проекта будет несколько разработчиков.
Это поможет устранить дублирования проектов. Например, в приведённом списке представлено сразу 4 модуля для интеграции с Яндекс.маркет. Думаю, лучше всё таки будет объединить усилия.
Помощь новым разработчикам. Несколько модулей находятся в песочницах из-за того, что некому сделать review кода. На д.о. яндекс мало кому интересен…
Для многих яндекс сервисов интеграция с Друпалом полностью отсутствует. В том числе для самого главного, на мой взгляд сервиса — Яндекс.xml.
Для одного общего проекта, легче найти спонсоров.
Attached poll “Нужно ли объединять все яндекс.модули в один проект?”.
Register or login to poll
Results:
Да: 43 голоса
Нет: 25 голосов
Источник: http://www.drupal.ru/node/74274
Хочу поделиться с комьюнити модулем controller, который можно взять здесь. В чем смысл модуля?
Модуль позволяет для каждого УРЛа, который вы определяете в hook_menu() прописать действие контроллера. Для этого есть специальный новый элемент ‘action’:
<?php
/**
* Implements hook_menu().
*/
function controller_menu() {
$items = array();
$items['admin/settings/controller'] = array(
'title' => 'Controller settings',
'action' => 'SettingsController::indexAction',
'access arguments' => array('access administration pages'),
);
return $items;
}
?>
Здесь объявляется новый контроллер SettingsController и действие indexAction() которое будет вызывано для УРЛа ‘admin/settings/controller’.
По умолчанию контроллеры должны лежать в специальной папке controllers/. Которую можно создать в папке своего модуля. Имя файла будет таким же как и прописано в ‘action’, однако имя класса нужно дополнять префиксом, который будет равен имени модуля после применения СamelCase нотации (с первой большой буквой). Звучит сложно, чтобы понять какие префиксы добавятся для разных модулей, несколько примеров:
foo_bar станет FooBar
my станет My
test_my_super станет TestMySuper
и т. д.
В примере выше, в хуке меню объявлен контроллер SettingsController, имя модуля controller, значит полное имя класса будет ControllerSettingsController, а имя файла SettingsController.php. Пример как все это дело работает можно найти в самом модуле.
Надеюсь, понятно описал, если есть вопросы, спрашивайте!
P.S. У темы появилось продолжение.
Источник: http://www.drupal.ru/node/74262
Пример 1. Как с Drupal создать форму и вывести данные из формы на этой или другой страници.
————————
| Создаем форму |
————————
|
———————————————————————
| Выводим данные с помощью функции variable_get() |
———————————————————————-
Для этого:
Создаем модуль.
Для этого:
- создаем папку и называем ее по названию модуля, например urokone и сохраняем его в my_site/sites/all/modules
- в этой папке создаем в notepad++ два файла в формате utf-8 without BOM. Что такое BOM и где скачать notepad++ смотрим в википедии.
Создаем два файла в этой папке и называем их
urokone.info
urokone.module
1.1. Минимальное содержимое файла urokone.info
; $Id$
name = Urokone
description = Simple form one
core = 6.x
; $Id$ //если вы будите выставлаять ваш модуль на Drupal.org то он добавит автоматически свои параметры
name = urokone // название вашего модуля
description = Simple form one //описание
core = 6.x //в нашем случае мы пишем для Drupal 6.
1.2. Минимальное содержимое файла urokone.module
Минимальное содержание этого файла, для того что бы открыть страницу с модулем (с формой), это функция меню.
<?php
function urokone_menu() {
$items = array();
$items['urokone'] = array(
'page callback' => 'drupal_get_form',
'page arguments' => array('urokone_formone'),
);
return $items;
}
$items['urokone'] = array( ); // эта сторочка означает, что форму c названием (Form_ID) urokone_formone, которую я собираюсь вставить в этот модуль можно будет найти после активации если кликнуть на локальном сервере
127.0.0.1/my_site/urokone
Теперь активируем модуль
Для этого:
- кликните в администраривной панели на Administer -> modules
ваш новые модуль будет находится в разделе others. Кликаем чекбокс напроив нашего модуля.
У меня на локальном сервере это выглаядит так:
И кликаем на кнопку Save Configuration. Когда сделаем следующие изменения в модуле надо будет очистить кеш. Administer->Performance->Clear cashed data
2. Пишим весь модуль.
———————————–
2.1 | Создаем меню |
———————————–
|
————————————————————————-
2.2. | Создаем условия доступа для различных пользователей |
————————————————————————–
|
——————–
2.3. | Создаем help |
——————–
|
—————————————————————————-
2.4. | Создаем форму |
———————–
|
———————————————————————————————-
2.5. | Выводим содержиое, которое user вбил в форму на экран (в нашем
случае в блоке)
————————————————————————————————
2.1. Создаем меню.
Для создания меню используем hook – это функции дрюпала. Например hook
function hook_menu()
для нашего модуля мы должны измеить по названию нашего модуля на
function urokone_menu() {
$items = array();
$items['urokone'] = array(
'title' => 'Как подтвердить факт отправленния ненулевых данных в форму?',
'description' => 'Urokone first form',
'page callback' => 'drupal_get_form',
'page arguments' => array('urokone_formone'),
'access arguments' => array('access administration pages'),
'type' => MENU_NORMAL_ITEM,
);
return $items;
}
2.2. Создаем условия доступа различных пользователей.
Используем хук hook_perm()
function urokone_perm() {
return array('access urokone content', 'access administration pages');
} // function urokone_perm()
2.3. Создаем help
Используем хук hook_help()
function urokone_help($path, $arg) {
$output = ''; //declare your output variable
switch ($path) {
case "admin/help#urokone":
$output = '<p>'. t("Displays information about site") .'</p>';
break;
}
return $output;
} // function urokone_help
Здесь можно сохранить модуль. Помните (Administrator-> modules -> Save configurations) и посмотреть появление строчки “Displays information about site” , если пойти Administer – > help -> urokone
Если на этой страницы кликнуть на urokone то увидим страницу со строкой “Displays information about site”. Мы в хуке help можем заменить эту строку на подробное описание нашего модуля.
———————————————————————————————
Теперь нам осталось
————————
| Создать форму |
————————
|
———————————————————————
| Выводим данные с помощью функции variable_get() |
———————————————————————-
———————————————————————————————-
2.4. Создаем форму
Используем функцию urokone_formone()
Например я хочу сделать такую форму:
Для этого в Drupla мы пишем функцию urokone_formone().
function urokone_formone($form_state) {
$form = array();
$form['one_one'] = array(
'#type' => 'checkbox',
'#title' => 'if ($_REQUEST["text"]) {echo "Data was send";}',
'#default_value' => variable_get('one_one', false),
);
$form['one_two'] = array(
'#type' => 'checkbox',
'#title' => t('if ($_REQUEST("text")) {echo "Data was send";}'),
'#default_value' => variable_get('one_two', false),
);
$form['one_three'] = array(
'#type' => 'checkbox',
'#title' => t('if {$_REQUEST["text"]} {echo "Data was send";}'),
'#default_value' => variable_get('one_three', false),
);
return system_settings_form($form);
} // end urokone_formone
Заходим на 127.0.0.1/lesson/urokone
При этом в результате работы функции return system_settings_form($form); появляютя две кнопки “Save configuration” и “Reset to default”
2.5. Выводим содержиое, которое user вбил в форму на экран (в нашем
случае в блоке. Используем хук hook_block.
function urokone_block($op='list', $delta=0) {
if ($op == "list") {
$block = array();
$block[0]["info"] = t('urokone');
return $block;
}
else if ($op == 'view') {
switch ($delta) {
case 0:
$block_content = '';
$block['subject'] = 'urokone';
$one_one= variable_get('one_one', false);
$one_two= variable_get('one_two', false);
$one_three= variable_get('one_three', false);
if ($one_one or $one_two or $one_three) {
if ($one_one) $block['content'] .= 'your answer is correct ';
if ($one_two) $block['content'] .= 'your answer is not correct ';
if ($one_three) $block['content'] .= 'your answer is not correct';
}
break;
}
return $block;
}
} // end urokone_block
Теперь надо активировать новый блок urokone который мы создали. Идем в Administer -> blocks.
Находим наш блок urokone в списке Disabled.
Меняю регион с “none” на другоe. Я например выбрала “Left sidebar”.
И нажимаю на кнопку внизу Save blocks.
Теперь зайдем еще раз на страницу с нащей формой 127.0.0.1/lesson/urokone и кликнми на какой нибудь чекбокс. Например на вророй чекбокс с правильным ответом.
У нас слева в блоке urokone появится сообщение о том на какой чекбокс мы кликнули.
Прикрепленный файл
Размер
tut1_1.png
29.72 кб
tut1_2.png
24.68 кб
tut1_3.png
23.3 кб
tut1_4.png
47.17 кб
tut1_5.png
14.56 кб
tut1_6.png
33.72 кб
tut1_7.png
56.37 кб
tut1_8.png
40.71 кб
Источник: http://www.drupal.ru/node/74258
Я буду использовать модуль, который полностью аналагечен модулю из урока один. Я хочу добавить еще один чекбокс в форму и изменить title у первой страницы.
Изменить форму можно и без использования модуля. Смотрите в комметах sas@drupal.org: Как без использования модуля изменить форму.
Код двух файлов модуля uroktwo:
uroktwo.info
;$Id$
name = Uroktwo
description = Tutorial Change form with form_alter
core = 6.x
uroktwo.module
<?php
;$Id$
/*****************************************************
* Implements hook_menu().
*******************************************************/
function uroktwo_menu() {
$items = array();
$items['uroktwo'] = array(
'title' => 'What is the correct way to create MySql database? ',
'description' => 'lesson two form',
'page callback' => 'drupal_get_form',
'page arguments' => array('forma'),
'access arguments' => array('access content'),
'type' => MENU_NORMAL_ITEM,
);
return $items;
}
/*****************************************************
* Implements hook_perm().
*******************************************************/
function uroktwo_perm() {
return array('access uroktwo content', 'access administration pages');
} // function uroktwo_perm()
/*****************************************************
* Implements hook_help().
*******************************************************/
function uroktwo_help($path, $arg) {
$output = ''; //declare your output variable
switch ($path) {
case "admin/help#uroktwo":
$output = '<p>'. t("Displays information about site") .'</p>';
break;
}
return $output;
} // function uroktwo_help
/*****************************************************
* Implements function forma
*******************************************************/
function forma($form_state) {
$form = array();
$form['one'] = array(
'#type' => 'checkbox',
'#title' => t('create.databas()'),
'#default_value' => variable_get('one', false),
);
$form['two'] = array(
'#type' => 'checkbox',
'#title' => t('mysql_create_db()'),
'#default_value' => variable_get('two', false),
);
$form['three'] = array(
'#type' => 'checkbox',
'#title' => t('create_mysql()'),
'#default_value' => variable_get('three', false),
);
$form['four'] = array(
'#type' => 'checkbox',
'#title' => t('create_d()'),
'#default_value' => variable_get('four', false),
);
$form ['submit'] = array (
'#type' => 'submit',
'#value' => t('Submit'),
);
return $form;
} // end forma
/*****************************************************
* Implements hook_block().
*******************************************************/
function uroktwo_block($op='list', $delta=0) {
if ($op == "list") {
$block = array();
$block[0]["info"] = t('uroktwo');
return $block;
}
else if ($op == 'view') {
switch ($delta) {
case 0:
$block_content = '';
$block['subject'] = 'uroktwo';
$one= variable_get('one', false);
$two= variable_get('two', false);
$three= variable_get('three', false);
if ($one or $two or $three) {
if ($one) $block['content'] .= 'your answer create.database() was incorrect ';
if ($two) $block['content'] .= 'your answer mysql_create_db() was correct ';
if ($three) $block['content'] .= 'your answer create_mysql_db() was incorrect';
}
break;
}
return $block;
}
} // end uroktwo_block
Для написания hook_form_FORM_ID_alter нам надо знать значение FORM_ID. Если это наш собственный модуль, то можно просто посмотреть на функцию формы.
function forma ($form_state)
forma в нашем случае и будет Form_ID, а hook будет называтся название_модуль_form_forma_alter. Для нашего модуля это будет uroktwo_form_forma_alter.
Второй способ найти Form_ID это посмотреть source code. Для этого я на локальном компьюторе открываю страницу с формой. В моем случае название сайта lesson. В хуке меню мы в этой строчке определили ($items['uroktwo'] = array()), что форму можно открыть, если набрать 127.0.0.1/lesson/uroktwo.
Откройте страницу с формой. Теперь в интернет эксплоурере идите Page -> view souce. С помощью ctrl – F ищим строчку в которой есть слово form. У меня это
То есть id = “forma”
Теперь собственно хук
<?phpfunction uroktwo_form_forma_alter(&$form,
&$form_state) {
$form['one']["#title"] = "I do do not know";
$form['five'] = array(
'#type' => 'checkbox',
'#title' => t('create_data()'),
'#default_value' => variable_get('five', false),
);
}
?>
Получилась полностью функциональная форма, но кнопка сабмит расположенна выше нового чекбокса.
Давайте это исправим. Добавим строчку weght в хук, и у нас получится
<?phpfunction uroktwo_form_forma_alter(&$form,
&$form_state) {
$form['one']["#title"] = "I do do not know";
$form['five'] = array(
'#type' => 'checkbox',
'#title' => t('create_data()'),
'#default_value' => variable_get('five', false),
);
$form ['submit'] ['#weight'] = 1000;
}
?>
На этом все.
P.S. Создавать новые модули надо сначала на отдельном, выделенном для этого сайте, а потом уже переносить в реальный сайт.
Прикрепленный файл
Размер
tut2_1.png
35.34 кб
tut2_2.png
31.79 кб
tut2_3.png
20.71 кб
Источник: http://www.drupal.ru/node/74214
Описание:
Модуль создан для создания пользовательских страниц с возможностью подмены контента, как всей страницы, так и только той части, что выводится в переменной $content.
Возможности:
Создание неограниченного числа пользовательских страниц
Создание сложных путей
Создание путей с именованными параметрами вида %param, %some итд
Создание путей с именованными зарезервированными параметрами вида %node, %user, %modulename_modulename
Создание путей с неограниченным числом параметров (ограничение только на длину URI)
Создание не явных параметров вида %
Создание страниц с указанием ролей, которые могут иметь доступ к этим страницам
Создание страниц с указанием темы
Создание шаблонов страницы как в отдельном файле темы вида [cid].tpl.php, так и в template.php вида [cid]()
Поддержка модуля features для экспорта/импорта страниц
Поддержка модуля context
Подробности тут: http://css.mirocow.com/projects/custom-page/wiki/Wiki
Скачать тут: http://css.mirocow.com/projects/custom-page/repository
Level: Profi
Источник: http://www.drupal.ru/node/73058
Внимание! Трансляцию можно смотреть на http://yatv.ru/DrupalConf_2011_P2
Периодически инернет отваливается, но мы стараемся оперативно восстанавливать вещание
Слайды конференции http://dl.dropbox.com/u/1197453/drupalconf2011.zip
Источник: http://www.drupal.ru/drupalconf-moscow-2011-video
В пятницу 2.12.2011 в 19:00 пройдет очередная встреча Drupal кафе Москва
Место проведения уже традиционно – ул. Покровка 38/1 Читалкафе (вход с Лялиного переулка) карта. Вход свободный, регистрация не требуется, глубоких познаний друпала — тоже.
Список докладов и тем для дискуссии:
Увеличение качества и прибыльности проекта для разработчика
Открытое обсуждение темы – Drupal vs Бизнес: почему Drupal лучше любого framework и как его правильно готовить при управлении проектами.
Типы контента — это гвозди прибивающие ноды в нужные места сайта. А теперь уберём гвозди… (глубоко теоретическая дискуссия)
И напоследок, когда все захотят спать: MySQL + Drupal, базовая настройка
Источник: http://www.drupal.ru/node/72096
Решил поделиться тем что узнал, пока в кратком виде как можно быстро обновлять редакции сайтов
Допустим мы имеем сайт ( придумаем ему синоним @SITE) в двух и более редакциях, например:
1) Сайт в интернете видят все люди – @site.live
2) Сайт на локальной машине – @site.dev
обновляем файлы сайтов вместе с модулями (откуда куда):
drush rsync –progress @site.dev @site.live
обновляем базы данных (при дополнительных параметрах, можно исключать/включать таблицы) (откуда куда)
drush sql-sync –no-cache @site.dev @site.live
обновляем только файловый контент сайтов (откуда куда)
drush rsync @site.dev:%files @site.live:%files
(по дефолту site/mysite.ru/files/ или sites/default/sites – кто любит плодить друпалы)
Хотим посмотреть список включенных модулей удаленного сайта
drush @site.live pml –status=enabled
Хотим включить модули удаленного сайта: admin_menu authcache
drush @site.live en admin_menu authcache -y
Через drush мы экономим много времени на эти операции, иначе эти операции можно выполнять вручную: ставить галочки, копировать файлы….
Теперь опишу как мы обозначаем синонимы, оригинал примера тут http://drupalcontrib.org/api/drupal/contributions–drush–examples–exam…
1. Создаем файл site.aliases.drushrc.php в любом из каталогов ~/.drush, /etc/drush, там где установлен drush, либо прописываем дополнительный путь для каталога синонимов
2. Приведу пример своего файла в котором описан сайт с двумя версиями live – живой сайт на хостинге, dev – сайт на локальной машине
<?php
$aliases['dev'] = array(
'root' => '/var/www/drupal7/',
'uri' => 'www.mysite.local',
);
$aliases['live'] = array(
'root' => '/home/user/projects/mysite',
'uri' => 'site.ru',
'remote-host' => 'mysite.ru',
'remote-user' => 'user-hosting',
'ssh-options' => '-p2222',
'path-aliases' => array(
'%drush' => '/home/user/bin/drush/',
'%drush-script' => '/home/user/bin/drush/drush',
#'%root' => '/home/user/projects/site/sites/',
'%dump-dir' => '/home/user/projects/site/dump/',
'%dump' => '/home/user/projects/site/dump/sro.sql',
#'%files' => 'sites/site.com/files',
),
);
?>
ps Особеннно радует работа с мультисайтиногом, т.е. даже когда у вас сайты в sites/ на одной установке drupal
Синхронизируем сайты drupal через drush
от lullabot Более подробно на английском
работает ли под вендой – незнаю, т.к. не использую её
Единственное не получилось у меня обновить сайт с одно удаленного сервера на другой удаленный сервер (локальный удаленный – удаленный локальный = работает)
Источник: http://www.drupal.ru/node/71139
Итак, новости! Во-первых, наш генеральный спонсор – компания Microsoft!
0. Конференция состоится 3 декабря.
1. Формат – 1 поток.
2. Конференция пройдет там же, где и в прошлый раз – метро ВДНХ, павильон Электрификация http://www.expo-elektra.ru/kak-nas-najti.html . Будет интернет! Все недочеты организации прошлой конференции учтем.
3. Конференция будет бесплатной!
Дорогие гости из других городов, можете покупать билеты. Дата не поменяется, событие состоится!
Открыта регистрация на сайте http://drupalconf.ru/user/register Если вы участвовали в прошлой конференции, вам необходимо зайти на сайт и обновить информацию в профиле.
Открыто голосвание и прием докладов! зарегистрированные пользователи могут добавить доклад, перейдя по ссылке http://drupalconf.ru/node/add/session
Голосовать за доклады зарегистрированные пользователи могут по адресу http://drupalconf.ru/sessions
Начало регистрации: 9:30
Окончание конференции: 19:00
Источник: http://www.drupal.ru/node/70326
День добрый.
Грядёт Drupal 8 и в нём будет новая тема оформления. Как в 7-ке на смену Garland пришла Seven, так и в 8-ке будет новая тема, в том числе и тема админки.
Хотялось бы поднять тему разделения темы сайта и темы админки и узнать, кто какую тему устанавливает для админки. На данный момент для Drupal 7, по моему мнению популярны три темы:
Seven – стоит по умолчанию
RootCandy
Rubik (требует наличия темы Tao)
На мой взгляд Rubik – наиболее удобная и проработанная тема для админки. А для быстрой навигации по страницам настройки модулей есть страница http://www.site.ru/admin/index.
Поделитесь какими темами для админки Вы пользуетесь.
Только вместе мы сможем достичь светлого будущего.
Прикрепленный файл
Размер
seven.png
47.61 кб
rootcandy.png
46.23 кб
rubiktao.png
72.23 кб
Attached poll “Какую тему вы используете для админки”.
Register or login to poll
Results:
seven: 29 голосов
rootcandy: 6 голосов
rubik: 17 голосов
свой вариант: 6 голосов
OM Admin Theme: 0 голосов
Polpo Admin Theme: 1 голос
Источник: http://www.drupal.ru/node/69727
Решил на сайте сделать корзину в сплывающем окне.
Прежде всего хочу сказать спасибо Splash за помощь по выковыриванию данных из корзины.
И за отличный модуль UC JS CART который очень был кстати.
Были использованы модули uc ajax cart для добавления динамической корзины, colorbox для попап окон, uc js cart для динамического подсчета товара, ну и немного допилены tpl и css.
Итак первое это uc ajax cart. В нем есть папка с тимплейтами, немного правим .tpl для реализации внешнего вида и некоторого функционала.
Сюда же добавим скрытый div с содержимым корзины и ссылку colorbox для показа этого содержимого в попап окне.
У меня это так:
<a href="?width=850&height=auto&inline=true#cartOpen" class="colorbox-inline">В корзине <?
$a = count(uc_cart_get_contents());
echo $a.' товар'.numberProduct($a, array('','а','ов'));
?></a>
<div class="price-of-cart">на <strong><?php print $total ;?></strong></div>
<div id="myCart" style="display:none;">
<div id="cartOpen">
<h2 class="cart_header">Корзина</h2>
<?php print ubercart_popup(); ?>
</div>
</div>
По внешнему виду так:
Там еще функция для склонения товар, товары, товаров есть:
<?php
function numberProduct($number, $titles) {
$cases = array (2, 0, 1, 1, 1, 2);
return $titles[ ($number%100>4 && $number%100<20)? 2 : $cases[min($number%10, 5)] ];
}
?>
Далее как вы увидели в шаблоне есть вывод содержимого корзины <?php print ubercart_popup(); ?>
Это и есть функция которая выдирает содержимое корзины писать её нужно в template.php
Выглядит она так:
function ubercart_popup() {
if (module_exists('uc_cart')) {
$items = uc_cart_get_contents();
if (empty($items)) {
return theme('uc_empty_cart');
}
$output = '';
foreach (uc_cart_cart_pane_list($items) as $pane) {
if ($pane['enabled']) {
$output .= $pane['body'];
}
}
return '<div id = "uc_popup">'. $output .'</div>';
}
}
В общем содержимое уже выводится в попапе, только вот есть несколько моментов. Это не срабатывает яваскрипт для обновления позиций товара из модуля uc ajax cart(как решить не знаю). По этому поводу я отключил в настройках модуля фитчу “Ajaxify cart page”.
Далее установите модуль uc js cart – как раз он и позволяет динамически подсчитывать стоимость.
Вот практически и все. Остальное можно сделать средствами css.
Осталось одно, когда мы открываем корзину и добавляем или уменьшаем количество позиций, в самом блоке корзины при закрыти попап окна нихера не меняется. Скорее всего нужно дописать кусок яваскрипт кода для обновления.(займусь позже)
У меня это выглядит вот так все:
Если кто то из читателей решал этот воброс более изящно, корректно, быстро и еще как нить иначе расскажите плиз.
Всем спасибоу!
Источник: http://www.drupal.ru/node/69695
Ну вот и пришло время закончить обжовывать данную тему.
У меня кончилось горючее и печеньки
Сегодня рассмотрим настройки и внешний вида материалов, а также пройдемся (еще раз) механике трансформации ноды ))))
Глава 1
Как скрыть ноду от лишних глаз
Актуально при постройке структуры на основе нод, закрепление материала освещенного в части 2
Глава 2
Карточка компании
темизируем ноду
Глава 3
Типы материалов
Пробежимся по 3-ем основным материалам
Глава 4
Заключительная
За сим господа, я завершу писать на эту тему.
В скором времени постараюсь сделать дамп и выложить на суд общественности для допилки и закидывания помидорами.
Вместе все-таки легче делать. У меня уже глаза мылятся..
Глава 5
Заключительная 1 (нов 2)
И все-таки, а нахера оно надо?
Отвечу: помощь манагерам или персоналу без финансовых вливаний. Повышение личного экспириенса. Могу я, значит может и друпал, только четко поставить задачу.
Можно построить ледокол из обычной лодки. Все ограничено Вашей фантазией или конкретной задачей.
часть 1
часть 2
часть 3
————–
оригинал
————–
ДАМП
SQl дамп
Дамп сайта целиком
Импортируете SQL в свою базу ( мой префикс crm2_ )
Заливаете дамп сайта на хостинг (денвер) или еще куда. Дамп целиком, с модулями и т.д.
Редактируете settingd.php под свои нужды
Заходите на свой сайт через www
Логин – cooper
Пароль – cooper
Attached poll “Делать дамп?”.
Register or login to poll
Results:
нах: 4 голоса
давай: 15 голосов
давай, я помогу идеями и реализацией: 5 голосов
давай-давай, я его подшаманю и продам, а тебе шиш: 2 голоса
не-не-не, я с 1С останусь: 0 голосов
Источник: http://www.drupal.ru/node/69691
15 октября 2011 в городе Краснодаре будет проводиться BarCamp, силами Южного сообщества будет организована секция Drupal, в рамках которой будет несколько докладов и бурное их обсуждение.
Темы и докладчики:
Почему Drupal? Или немного из своего опыта. Докладчик: Виктор Степаньков
Инструменты для SEO и интернет-маркетинга в Drupal. – Докладчик: Пётр Селфин
Продаем бесплатное – ищем ценность OpenSource решений на примере CMS Drupal. Докладчик: Александр Дубовской
Красивые формы в Drupal 7. Докладчик: Богдан Романенко
Мероприятие состоялось, считаю довольно успешно.
Видео и тексты презентаций будут выложены на http://drupalyug.ru.
Источник: http://www.drupal.ru/node/69365
Во вторник 4.10.2011 в 19:00 пройдет третья встреча Drupal кафе Москва
Место проведения уже традиционно – ул. Покровка 38/1 Читалкафе (вход с Лялиного переулка) карта
На этот раз у нас будет несколько докладов.
1. Microsoft и Drupal (PVasili)
2. Настройка от боевого, до сервера разработки в VirtualBox (В. Касихин)
Установка Ubuntu-server в VirtualBox.
Установка и настройка nginx.
Установка и настройка MariaDB.
Установка и настройка Git.
Установка Zend Server Se.CE.
Создание ключей доступа.
Первоначальная установка Drupal.
Кратко о системах мониторинга и управления: Munin и WebAdmin
3. Минидоклады: инструменты разработки в Drupal, меры защиты сайта (Александр Графов)
Оставшееся время, как всегда посветим остальным актуальным вопросам.
Источник: http://www.drupal.ru/node/69238
Итак, окончательная информация:
Дата: четверг, 29 сентября, 19:00.
Место проведения Drupal Cafe в Иркутске – кофейня “Белая ворона”: http://vkontakte.ru/coffeenbook. Адрес: Карла Маркса, 37. Вход через магазин цветов “Рассвет”, находится между Л’Этуалью и Золотом Якутии. Заходите в цветы, немного проходите вперед и спускаетесь в цокольный этаж, идите на запах кофе.
В программе – 3 доклада (20-30 минут):
“Насколько глубока кроличья нора?”. Продвинутое применение модуля Views (уровень – начальный и средний).
“Ускоряемся”. Быстрая разработка шаблонов Drupal при помощи “базовых” тем (уровень – начальный и средний).
“Мелочи в Drupal”. “Подводные камни”, о которых лучше знать заранее. (уровень – начальный).
Будем рады видеть всех, кому интересен Drupal и вообще тема создания сайтов и веб-сервисов.
Drupal Cafe Иркутск в социалках:
“В контакте”: http://vkontakte.ru/event30298356
“Facebook”: http://www.facebook.com/event.php?eid=172728356140202
Иркутяне, добавляйтесь!
Есть вопросы? Звоните: +7 914 8888621
Комментировать можно здесь и на drupal4all: http://drupal4all.ru/node/25
Афиша мероприятия
Источник: http://www.drupal.ru/node/69127
Может кому пригодится http://druit.ru/blogs/views/203
Источник: http://www.drupal.ru/node/68935
Сделал модуль ImageAPI GraphicsMagick интегрирующий инструментарий для работы с изображениями GraphicsMagick c ImageAPI. С помощью модуля можно применять GM для обработки изображений, например в модуле ImageCache и ImageCache Actions (вместо встроенного в php GD2 и ImageMagick).
На данный момент в нем интегрированы простейшие действия (изменения размеров, кадрирование и т.д.). Также реализовал поддержку наложения водяных знаков с помощью этого модуля в модуле ImageCache Actions: http://drupal.org/node/1284668 .
Больше всего модуль будет полезен программистам, способным написать свое действие (image action) но также подойдет и обычным пользователям для снижения нагрузки на хостинг и ускорения “тяжелых” операций с изображениями (естесственно, при условии, что вы можете установить сам GraphicsMagick – не на каждом хостинге это доступно).
Видел на Д.ру уже подобную тему, но там речь шла о модуле для D7. Этот модуль – только для D6.
Сравнение с ImageMagick ImageAPI инструментарием.
Этот модуль не использует GM как IM (GM частично поддерживает команды IM). В целом, я считаю достоинством то, что это отдельный ImageAPI инструментарий. Например, этот модуль знает про существование gm утилиты и ее команд, и может запускать другие команды gm, а не только convert. Кроме того, GM на одних и тех же командах может вести себя не так, как IM, потому что его исходный код отличается.
Этот модуль запускает каждое действие с изображением как отдельную операцию с временным файлом. Данное поведение необходимо, чтобы полноценно использовать различные команды (GM не умеет группировать _все_ команды в одну). Это несет в себе потенциальные недостатки (небольшое снижение производительности и возможную потерю качества результирующего изображения при многократных последовательных операциях с потерей качества), но обходится с помощью своего действия (image action).
Этот модуль работает в “сыром” режиме – каждое действие имеет полный доступ к командной строке (на самом деле, действие само запускает GM) что позволяет делать с изображением все что угодно, включая запуск любых сложных операций и внешних программ обработки изображений.
Источник: http://www.drupal.ru/node/68783
Весьма популярная проблема “пропавшего” CKeditor или его частей. Во время разработки своего последнего сайта столкнулся с ней раза три и все по разным причинам. Отпишусь, пожалуй. Сразу скажу, что решения проблем в большинстве случаев очевидные, но сразу в голову не всегда приходят.
Возможная проблема 1
Проблема: Установили модуль, но не закинули в него сам редактор.
Решение: Идем на страничку редактора, качаем и закидываем файлы и папки редактора в подпапку “ckeditor” папки модуля. В этой подпапке должен быть файл-подсказка COPY_HERE.
Возможная проблема 2
Проблема: Панелька просто не появляется. Или появляется, но не у всех пользователей.
Решение: Во первых правильно должны быть настроены разрешения ролей самого Drupal (mysite/admin/user/permissions). Во вторых CKeditor нужно вручную привязывать к новым ролям. Идем в настройки редактора (mysite/admin/settings/ckeditor), выбираем профиль, например Default и напротив него нажимаем “изменить”. В первой группе настроек “Основные настройки” выставляем галочки нужным новым ролям.
Возможная проблема 3
Проблема:
У меня такое произошло после выгрузки сайта на хостинг.
Решение: Помогло удаление модуля и переустановка+перенастройка прямо на хостинге. Корень проблемы так и не нашел.
Возможная проблема 4
Пробелма: не открывается файловый менеджер IMCE или нет кнопки “Browse” при попытке добавить картинку в сообщение.
Решение: идем в настройки редактора (mysite/admin/settings/ckeditor), выбираем профиль, нажимаем напротив него “изменить”. Далее в группе Настройки файлового браузера, в File browser type (Link dialog) выбираем IMCE.
Возможная проблема 5
Проблема: При работе с IMCE нет кнопки “загрузить” и “Создать дирректорию”.
Решения: Во-первых, чтобы создать поддиректории нужен модуль IMCE mkdir. Кнопки у меня пропали из-за конфликта с “modernizr”, который использовал при вертске.
UPD: предложенные решения помогли именно мне, в то время как не помогли другие. Таких “других” очень много. Смотрите и их, напрмиер кликнув по тегу ckeditor.
Источник: http://www.drupal.ru/node/68678
Всех программистов поздравляю с профессиональным праздником! Успехов в работе и не бросайте Друпал Без вас тут будет тяжело
Источник: http://www.drupal.ru/node/68471
Приглашаем всех самарских (и не только самарских!) друпалеров встретиться на следующей неделе и обсудить дела насущные.
На первом собрании предлагается:
- познакомиться
- пообщаться
- обсудить возможность организации мероприятия как у взрослых: с проектором и докладами
Место проведения:
Beer club в Paint House, http://dosug.samara24.ru/restaurants/company/21476
Время проведения:
суббота, 17 сентября, 17:00
Карта:
мой телефон (Антон)
+7 917 602 37 90
Attached poll “Место проведения”.
Register or login to poll
Results:
Beer club (Paint House): 7 голосов
У Швейка: 3 голоса
Frau Muller: 5 голосов
Источник: http://www.drupal.ru/node/68264
Сделал модуль Views Tracker, позволяющий создавать высокопроизводительную замену родному трекеру из ядра. Модуль основан на идеях модуля Tracker 2, но по сути является абсолютно новым, написанным с нуля проектом.
Актуальность модуля можно почувствовать на своей шкуре здесь, на Drupal.ru, где трекер, похоже, кешируется, что убивает основную идею – быстрое отслеживание изменений.
Чтобы получить максимальный прирост производительности от использования модуля, нужно создать view по аналогии с tracker, встроенным в Views, но использовать поля, аргументы, фильтры и критерии сортировки из групп модуля Views Tracker везде, где это возможно:
для общего трекера используйте группу Views Tracker
для трекера пользователя используйте группу Views Tracker User
Список дополнительных фич и различий между Views Tracker и Tracker2:
В отличие от Tracker 2, Views Tracker имеет индекс по типу материала. За счет этого можно создавать разные трекеры для разных групп материалов без потерь скорости.
В отличие от модуля Tracker 2, Views Tracker имеет поддержку модуля Node Comments
Views Tracker содержит значительно меньше кода, чем Tracker 2.
Tracker 2 не поддерживается – значительные изменения происходят за кадром. Видимо, сказывается то, что модуль используется на Drupal.org
Tracker 2 имеет интерфейс пользователя, а Views Tracker нужно использовать вместе с модулем Views (или написать свой интерфейс). Поддержка Views в Tracker 2 тоже есть, но почему-то отсутствует в релизе (те самые изменения “за кадром”).
Модуль только выложен, возможно имеет баги. Приглашаю желающих к тестированию.
Источник: http://www.drupal.ru/node/68023
Рад общественности представить новый модуль. Это Ajax microblog. Данный модуль реализует функционал Twitter и будет развиваться в этом направлении. Целью модуля или пакета модулей является организация полной копии функционала предоставляемой всеми известной системой микроблогинга Twitter.com
Ссылка на проект: http://css.mirocow.com/projects/microblog
скачать тут: http://css.mirocow.com/projects/microblog/repository
Спонсор модуля: www.ruh.kz
Прикрепленный файл
Размер
e6674f3201affd625334c0d00cb96301.jpg
71.2 кб
Источник: http://www.drupal.ru/node/67970
На одном очень популярном ресурсе посвященном различным ЦМС, в комментах о друпале нашел следующую запись о минусах системы:”Грубое русское сообщество”.
Это ведь мы с вами. И правда грубим и хамим новичкам. И я в том числе( Давайте будем добрей и терпеливее.
п.с. такое вот сегодня лирическое настроение
Источник: http://www.drupal.ru/node/67917
Только что опубликовал новость как комментарий в посте о модуле рассылок.
Здесь для удобства обсуждения еще раз расскажу как настроить автоматическую e-mail рассылку практически любых материалов с вашего сайта.
Настроить так, чтобы вебмастер не тратил время на составление рассылки и ее отправку.
Материалы публикуются на сайте и тут же попадают в рассылку, на основе определенных правил. Эти правила задаются через views.
Как это делается – всего 3 простых шага:
Берете мой модуль подписки – он нужен для набора подписчиков. Или используете “ручную” форму подписки от сервиса
Настраиваете любой фильтр через views на отдачу материалов в виде rss
Скармливаете один, два или сколько вам нужно вариантов rss сервису рассылок и… вуаля: письма уходя автоматически.
Подробнее о том как скормить и настроить rss для отправки писем.
Это не просто банальное транслирование rss на e-mail. Вы получаете:
Возможность настроить дизайн рассылки под свой корпоративный стиль;
Гибкую настройка правил отправки сообщений;
Полное отсутствие рекламы;
Использование языка Smarty для ветвлений и циклов;
Возможность импорта списка подписчиков.
Полный контроль режима отправки (моментальный автоматический, по расписанию или ручной);
Плюс остальные возможности сервиса рассылок.
Предпоследний и последний пункты требует отдельного пояснения.
Благодаря режиму отправки по расписанию, вы фактически можете организовать регулярные дайдежесты материалов сайта на e-mail. Или, наоборот, отправлять каждый новый материал “моментально” (раз в час).
Из остальных возможностей сервиса, если ваш проект коммерческий вам может пригодиться возможность персонализации и сбора любого количества дополнительных данных о подписчике. Это затем можно использовать для сегментирования списка рассылки.
Добавьте к этому всю мощь модуля views по формированию rss лент и в ваших руках очень гибкий и мощный инструмент для автоматизации работы с базой подписчиков.
Появились вопросы, спрашивайте – отвечу.
P.S. Если у вас уже собрана база подписчиков легально (!), то вы можете ее импортировать.
Источник: http://www.drupal.ru/node/67894
Продолжаем разгребать Вьюсы, Флаги и панели.
В данной статье рассмотрим блок (views) Часть Б нашего интерфейса и его работу.
Под катом трафик 1,3 мб.
Здесь мы рассмотрели только одну вьюху. Дальше больше! Когда протрезвею тогда посмотрим настройки флагов, настройки Rules и много еще чего вкусного.
часть 1
часть 2
часть 4
————–
оригинал
Источник: http://www.drupal.ru/node/67879
Сабж!
Задался вопросом “Как грамотно вставить таблицу в друпал, с использованием полей и т.д.?“, в поиске здесь наткнулся на топик “Вывести таблицу excel на страницу“. Вспомнил, что раньше видел пару модулей на drupal.org по теме, поискал и нашел.
Итак…
Tables Filter Module
Самый, наверно, простой табличный модуль. Ставите его, включаете в Форматах Ввода этот фильтр и, используете токены вида [table ] для редактирования таблицы. Пример построения таблицы – здесь.
Никакого импорта файлов и т.д.
Дешево и сердито.
Slickgrid
Более продвинутый вариант.
Удобные средства редактирования таблицы, приличное количество фич. Импорта файла с таблицей, похоже нет.
Имхо, удобен, если таблицы приходится добавлять нечасто и небольшие.
Sheetnode
Самый продвинутый модуль.
Для импорта использует http://phpexcel.codeplex.com/ и https://github.com/infojunkie/socialcalc
Некоторые возможности (на сейчас, модуль развивается):
Экспорт-импорт CSV, XLS, XLSX, OOCalc, Google Docs Spreadsheets (в разработке), etc.
Экспорт, помимо перечисленного, в PDF.
Значения таблиц могут раскидываться по (cck)полям.
… и многое другое.
Стабильная версия – только для 6ки, и разработка – для 7ки.
За подробностями лучше на страницу модуля.
Источник: http://www.drupal.ru/node/67684
Я думаю, каждый друпалер использует на своих сайтах модули Views и Pathauto. Да, на некоторых сайтах можно без них обойтись, но, фактически, оба этих модуля давно входят в джентльменский набор при запуске нового сайта, поэтому нет нужды объяснять, для чего они используются. Некоторое время назад я столкнулся с проблемой, которая не то, чтобы была критичной, но беспокоила моё эстетическое чувство и не давала мне считать свою работу выполненной. Дело было связано с тем, что views и pathauto по-разному представляют пользователю одни и те же вещи — как-то заголовки материалов и имена пользователей.
До некоторых пор это не особенно бросается в глаза, но представим себе следующую ситуацию — у вас есть вьюс, с помощью которого вы выводите список материалов по адресу example.net/content. Если задан аргумент, вьюс выводит только материалы за авторством конкретного пользователя. Самый простой способ сделать это — указать в качестве аргумента User:Uid. В результате получается, что при запросе вида example.net/content/1 будут отображаться все материалы, созданные суперпользователем, при запросе example.net/content/150, пользователем с uid 150 и так далее. Это хороший способ, у которого есть один минус — URL example.net/content/150 «некрасив» и мало, о чём говорит стороннему наблюдателю (хотя я часто использую такие конструкции для вьюсов, «закрытых» для пользователя).
Сделать URL «более говорящим» можно достаточно легко, если использовать в качестве аргумента не User:Uid, а User:Name. В результате мы получаем красивые адреса вроде example.net/content/ingumsky, едва взглянув на которые можно понять, что содержимое страницы будет иметь отношение к тому или иному пользователю (другое дело, какое отношение они к нему имеют . В принципе, такого решения уже вполне достаточно, если бы не одно «но»…
Например, представим, что на нашем сайте есть пользователи с именами Ingumsky, John Smith, jack_brown, S.White, He is Awesome, Паша. Мы включаем на сайте модуль pathauto и с его помощью создаём для каждого пользователя красивые адреса страниц профилей: example.net/users/ingumsky, example.net/users/john-smith и так далее. и здесь обнаруживается, что в адресах страниц пользователей, на страницах блогов и так далее синонимы имён пользователей отличаются от того, что принимает views в качестве аргумента. Сравните, как выглядят аргументы во Views и синонимы Pathauto [в квадратных скобках] для каждого из перечисленных выше пользователей (обращаю внимание, что в настройках аргумента включены опции «lowercase» и «turn spaces into dashes»:
example.net/content/ingumsky — материалы пользователя Ingumsky [ingumsky]
example.net/content/john-smith — материалы пользователя John Smith [john-smith]
example.net/content/jack_brown — материалы пользователя jack_brown [jackbrown]
example.net/content/s.white — материалы пользователя S.White [swhite]
example.net/content/he-is-awesome — материалы пользователя He is Awesome [he-awesome]
example.net/content/паша — материалы пользователя Паша [pasha]
Как видно, Views принимает в качестве аргумента именно имя пользователя, которое при указанных чуть выше настройках, просто переведено в нижний регистр и избавлено от пробелов (они заменены на дефисы). Но Pathauto при создании синонима вносит больше изменений в исходный текст. В результате в тех случаях, когда в именах пользователей встречаются знаки подчёркивания, точки, кириллица или даже некоторые английские слова, которые неважны для SEO (is, are и тому подобное), аргумент отличается от того синонима, который нам предлагает Pathauto.
Как я написал в самом начале записи, это не критичная проблема, но она… м-м-м… раздражает. Хочется, чтобы всё было красиво и «единообразно». Вопрос состоял в следующем: Как добиться того, чтобы скармливаемый вьюсу аргумент всегда выглядел так же, как выглядит ник в URL, созданном Pathauto?
Первоначальный поиск по этим вашим энтернетам не дал нужного мне результата, и я даже обратился за помощью к сообществу. Тот вариант решения, который мне посоветовали, показался мне излишне сложным для данного случая — к тому моменту я уже понял, в каком направлении нужно копать, и вскоре решение было найдено. Так как я уверен, что данная задача наверняка интересовала не только меня, предлагаю своё решение и вам:
1. В качестве аргумента мы будем использовать не User: Name, а User: Uid, пусть это прозвучит и несколько странно Теперь нам надо сделать так, чтобы из аргумента, который принимает наш вьюс, мы смогли вытащить uid;
2. В качестве «Что делать, если аргумент не указан» ставим «Показывать всё»;
3. Проверять аргумент мы будем с помощью php, поэтому смело выбираем в списке валидаторов «PHP Code»;
4. В текстовом поле пишем:
<?php
// Проверяем, не число ли дано в качестве аргумента
// Если число, аргумент подходит.
// Это особенно удобно, чтобы проверять, работает ли ваш вьюс с таким валидатором
if (is_numeric($argument)) {
return TRUE;
}
// Смотрим, не указано ли в качестве аргумента «all»
// Если указано, аргумент подходит, и мы покажем все материалы
elseif ($argument == 'all') {
return TRUE;
} else {
// У меня синонимы профилей пользователей выглядят как users/username
// Здесь мы подставляем наш аргумент, чтобы получить такой же синоним
// В вашем случае может потребоваться заменить 'users/' на что-то другое
$dru_alias = 'users/'.$argument;
// С помощью функции drupal_lookup_path ищем, каков внутренний адрес,
// соответствующий синониму — в нашем случае получится 'user/uid'
$dru_path = drupal_lookup_path('source',$dru_alias);
// Разбираем внутренний адрес, вытаскивая из него uid
$uid = substr($dru_path, strrpos($dru_path, '/') + 1);
// Отдаём uid в качестве аргумента и сообщаем, что всё верно.
$handler->argument = $uid;
return TRUE;
}
?>
5. Profit!
В результате мы получаем views, который правильно обрабатывает аргументы, если они выглядят так же, как наши синонимы. Этот вьюс принимает так же и непосредственно uid в качестве аргумента. Это удобно, но, если у вас есть пользователи с числовыми именами, лучше избавиться от первой части условия в if.
Возможно, гуру Друпал засмеют меня и скажут, что решение было очевидным. Что ж, возможно и так. Я до этого решения дошёл далеко не сразу да и то только по наводке комментаторов с drupal.org, благодаря которым я понял, что надо смотреть в сторону валидатора аргумента. Надеюсь, что это решение поможет кому-нибудь ещё.
Источник: http://www.drupal.ru/node/67625
Во вторник 30.08.2011 в 19:00 пройдет уже вторая встреча Drupal кафе Москва
Место проведения – ул. Покровка 38/1 Читалкафе (вход с Лялиного переулка) карта
По длительности планируем опять 2-3 часа, по примеру первой встречи.
Основной темой будет обсуждение результатов ДрупалКон’11 Лондон.
Если останется время, то посветим остальным актуальным вопросам.
Как всегда приветствуются доклады. Выступающие могут воспользоваться проектором и микрофоном.
Из изменений по поводу самого кафе:
На этот раз увеличиться ассортимент напитков, включая чай и кофе.
Так же в меню будет присутствовать еда, которой так не хватало на первой встрече.
По поводу WiFi вопрос пока остается не решенным, но в ближайшее время думаю разрешиться.
Attached poll “Приду на встречу”.
Register or login to poll
Results:
Да: 3 голоса
Нет: 4 голоса
Хочу, но не смогу: 2 голоса
Источник: http://www.drupal.ru/node/67534
Спортбокс занял 1-ое место в номинации “Развлечении и спорт” в ежегодном конкурсе “Рейтинг Рунета”.
Конкурс сайтов «Рейтинг Рунета» — это премия за лучшие интернет-проекты в своей номинации, проводимая среди профессиональных веб-разработчиков.
Ну и да, Спортбокс сделан на друпале, если кто не знает.
Источник: http://www.drupal.ru/node/67124
Компания основателя друпал Дриса Байтаерта “АКВИА” сменила фирменный стиль, у нее новый логотип, открылся новый сайт!
Компания разделила все сервисы на 4 категории
- Разработчики ( сборки и профайлы, на сайте можно скачать около десятка разных продуктов )
- Хостинг ( облачный хостинг для разработчиков и проектов, можно прямо на сайте выбрать себе тариф)
- Обслуживание ( от консультаций и тех. поддержки до дистанционного управления проектом)
- Обучение ( курсы тренинги и Acquia Library)
Можно бесплатно посмотреть Acquia Tv .
На сайте есть раздел showcase лучшие сайты на друпал.
На заставке написано что уже 2% сайтов в МИРЕ работают на ДРУПАЛ.
( ВСЕГО в мере более 300′000′000 сайтов! )
Источник: http://www.drupal.ru/node/66655
Собственно тема Remove Garland from Core.
Те кто не согласны, еще не поздно заступится.
Attached poll “Гарланд лучшая друпал тема всех времён и народов?”.
Register or login to poll
Results:
Да: 48 голосов
Нет: 33 голоса
Источник: http://www.drupal.ru/node/66608
Есть предложение встретиться друпалерам Москвы и их окрестностей.
Дата: конец августа-начало сентября.
Вариант 1. Посидеть в традиционном месте в ёлках-палках. Кафе такое, кто не знает.
Вариант 2. Весело всей толпой сходить на картинг, lasertag или любое другое времяпрепровождение.
Вариант 3. Выбраться ближе к природе и пожарить мяса на открытом огне.
Варианты 4, 5, 6 – предлагайте.
Attached poll “Что делаем?”.
Register or login to poll
Results:
Вариант 1: 4 голоса
Вариант 2: 5 голосов
Вариант 3: 8 голосов
Свой вариант: 0 голосов
Я ассоциальная личность и не буду ни с кем встречаться!: 8 голосов
Источник: http://www.drupal.ru/node/66206
Кто помнит или не помнит – я писал когда то, что под заказ пишу модуль для Промокодов (пруфлинк).
Собственно постепенно я его дописываю и сегодня ударным темпом закрыл одну из хотелок.
В чем профит модуля, спросите вы?
Все просто. Если вам нужно пользователю присвоить уникальный номер из заданного диапазона и присвоить ему роль – этот модуль предназначен именно для этого. Администратор генерит промокоды через админку, выдает людям. При регистрации или при редактировании профиля пользователь может указать в специальном поле промокод и получить номер и роль. Полученный номер можно использовать, к примеру, для выдачи значков или футболок и т.п. На роль можно повесить специфические права и доступы.
Для проекта открыл sandbox http://drupal.org/sandbox/softovick/1190802 – если кто желает, может поучаствовать в тестировании и фидбеке. На всякий случай прикрепил к посту архив с модулем.
UPD:
+ добавлен выбор роли, которая присваивается при активации промокода
+ сделан прототип более детального списка промокодов в виде таблицы с ссылкой на профиль пользователя.
Прикрепленный файл
Размер
promocode.zip
49.19 кб
Источник: http://www.drupal.ru/node/66200
На главной странице есть лента новостей. Она состоит из:
1. Дата новости;
2. Анонс новости;
3. Ссылка на саму новость.
Захотелось мне реализовать ajax-загрузку основного текста новости на место ссылки.
Изучив “как создать свой модуль”, основы javascript, jquery и вспомнив основы php-программирования я все таки реализовал свою идею. Возможно для профи это 5 минутное дело, у меня ушло около 5 дней в совокупности. Работу модуля можете посмотреть на www.appri.ru.
Модуль назвал loadnews. Здесь обноленный код.
Файл loadnews.module:
<?php
/*
* Implementing hook_init
*/
function loadnews_init() {
drupal_add_css(drupal_get_path('module', 'loadnews') . "/loadnews.css");
drupal_add_js(drupal_get_path('module', 'loadnews') ."/loadnews.js");
}
/*
* Implementation hook_perm
*/
function loadnews_perm() {
return array('access onthisdate content');
}
/**
* Implementation hook_menu()
*/
function loadnews_menu() {
// Элемент меню с соответствующим путем
$items['loadnews'] = array (
// Функция, которая будет "обрабатывать" путь
'page callback' => 'loadnews_ajax',
// Права на доступ к пути
'access arguments' => array('access content'),
// Элемент не будет отображаться в меню сайта
'type' => MENU_CALLBACK,
);
return $items;
}
/* Функция обработки запроса */
function loadnews_ajax() {
/*
* Ссылка на на новость передается методом GET в переменной 'url'
* В БД алисы адресов хранятся без первого слеша, поэтом удаляем его
*/
$url = substr($_GET['url'], 1);
// По полученному алиасу ищем в таблице url_alias соответствующий системный адрес
$sys_url = db_result(db_query("SELECT n.src FROM {url_alias} n WHERE dst = '%s'", $url));
/* Адрес получаем в виде "node/nid". Нам нужно получить параметр nid.
* Для этого разбиваем строку на массив из 2-х элементов, второй который наш nid
*/
$sys_url_array = explode('/',$sys_url);
// Сохраняем наш nid в переменную
$nid = $sys_url_array['1'];
// Выбираем поле основного текста новости "field_news_text_value" из таблицы "content_type_news"
$result = db_result(db_query("SELECT n.field_news_text_value FROM {content_type_news} n WHERE n.nid = '%d'", $nid));
// Наш ответ клиенту
drupal_json(array('status' => 1, 'data' => $result));
}
?>
Файл loadnews.js:
Drupal.behaviors.loadnews = function(context) {
// Добавляем для всех ссылок в блоке новостей class =loadnews
$('#block-views-news-block_news', context).find('a').addClass('loadnews')
// Реагируем на клик
.bind('click', function() {
// Передаем с методом get адрес ссылки
var href = $(this).attr('href');
// Переменная, это куда мы будем выводить ответ
var target = $(this).parents(".field-content");
// Прячем ссылку
$(this).hide();
// Вместо нее выводим анимацию
$(target).append("<div class=loading></div>");
// Получаем данные с сервера
$.get(Drupal.settings.basePath + 'loadnews', {url:href} , function(response) {
// Сохраняем ответ в переменной
var result = Drupal.parseJson(response);
// Прячем анимацию
$(target).find(".loading").hide();
// Вместо нее ставим "Свернуть"
$(target).append("<span class=hidenews>Свернуть</span>");
$(target).append("<span class=shownews>Подробнее...</span>");
$(target).find(".shownews").hide();
// Создаем блок для вывода текста новости
$(target).append("<div class='newstext'></div>");
// Изначально блок будет скрыт, чтобы потом красиво его развернуть
$(target).find("div.newstext").hide();
// Загружаем текст из переменной в блок
$(target).find("div.newstext").html(result.data);
// Красиво раскрываем наш блок
$(target).find("div.newstext").slideDown("fast").addClass("active");
// Реализация скрытия и раскрытия блока (нужно оптимизировать код)
$(target).find(".hidenews").click(function() {
$(target).find(".hidenews").hide();
$(target).find("div.newstext").slideUp("fast").removeClass("active");
$(target).find(".shownews").show();
});
$(target).find(".shownews").click(function() {
$(target).find(".shownews").hide();
$(target).find("div.newstext").slideDown("fast").addClass("active");
$(target).find(".hidenews").show();
});
});
return false;
});
}
Хотелось бы услышать мнения и замечания профи по коду. Спасибо за внимание.
Прикрепленный файл
Размер
loadnews_v6.x-1.6.zip
3.62 кб
Источник: http://www.drupal.ru/node/66172
Давно хочу прикрепить свою ленту сообщений из новой социальной сети Google plus на свой же хоумпейдж. Официального пути это сделать пока нет. Вот один из “неофициальных” вариантов:
1) создать RSS-поток ваших сообщений на сайте http://plusfeed.appspot.com/. В общем-то для этого просто надо добавить ваш ID на сайте G+ к адресу Plusfeed’а. Вот так, например – http://plusfeed.appspot.com/116910563308964275374
2) включить модуль Feed aggregator (есть в стандартном дистрибутиве Drupal) на странице ВАШСАЙТ/admin/build/modules/list.
3) добавить полученный на шаге 1 адрес фида в настройках на странице ВАШСАЙТ/admin/content/aggregator/add/feed
4) и, конечно, настроить cron (если он у вас еще не настроен) и не забыть установить права для просмотра ленты (на ВАШСАЙТ/admin/user/permissions).
И все…
По желанию можно задать адрес для этой страницы, добавить ссылку в меню сайта, сделать более внятное оформление и т.п.
Получится что-то вроде такого: http://vadimbarsukov.com/aggregator/sources/1
Не скажу, что меня все устраивает (например, не показываются фото и видео), но все же это лучше, чем ничего.
Источник: http://www.drupal.ru/node/66099
Приветствую.
Как оказалось, есть модуль, позволяющий отказаться от необходимости прописывать теги страницы в отдельном поле – Hashtags, теги как в твиттере, отмечаются непосредственно в тексте. И для seo лучше.
Единственный минус в том, что он есть только под 6-ю версию, и с портом D7 совершенно не ясно… аналогов модуля не нашел.
Источник: http://www.drupal.ru/node/66069
Default Node Gallery – дополнение к модулю Node Gallery – создает галерею по умолчанию для каждого юзера (и для каждой пары тип_галереи – тип_изображения) при входе его на сайт.
Так же позволяет управлять доступом к галерее по умолчанию, чтобы юзер случайно ее не удалил.
В общем, это должно работать как функция “неразобранные фотки” на многих фотосайтах.
Модуль пока сыроват – возможны ошибки, о которых прошу сообщать в issue queue модуля.
Источник: http://www.drupal.ru/node/66060
Долго капашилась, вроде что-то получилось, а вдруг кому-нибудь пригодиться.
Для быстрой и удобной работы с использованием хуков может пригодиться Eclipse PDT. После его установки, необходимо сделать следующее – скачать файл http://drupal.org/project/eclipse, его содержимое Drupal.xml импортировать в Preferences > PHP > Editor > Templates. Зайдите в Help menu, потом Install New Software введите
Name: XTND.US
Location: http://xtnd.us/downloads/eclipse.
У меня установилось, но почему-то в пункте Php Content Type не отобразились Drupal Module и Drupal Themes. Поэтому я ввела в ручную следующее -
# *.module
# *.install
# *.test
# *.info
# *.po
# *.theme
# *.engine
(для того, чтобы пхп их распознавал).
После данных действий, при наборе hook появляется выборка всевозможных хуков, а после выбора конкретного, его код отображается на странице. (Или же надо при наборе нажать ctrl+space)
Источник: http://www.drupal.ru/node/66000
Всем привет, презентую модуль-шлюз http://sms24×7.ru для SMS Framework.
Модуль очень простой, меньше 100 строк, использует их библиотеку, подробное описание api нашел тут.
Ссылка на модуль – https://github.com/stan-kondrat/drupal-sms24×7
PS. Никакого отношения не имею к sms24×7, была нужда в русском шлюзе, его нагуглил первым.
PPS. Если хотите по тестить стандартный модуль SMS User (Provides integration between the SMS Framework and Drupal users), но есть один момент. Он отсылает четырех значный код подтверждения, на что шлюз отвечает: “Сообщение содержит указание на платный номер“, самое простое решение:
diff --git a/sms_user.module.orig b/sms_user.module
index 799ec7f..403b609 100644
--- a/sms_user.module.orig
+++ b/sms_user.module
@@ -264,7 +264,7 @@ function sms_user_settings_sleep_form_submit($form, &$form_s
}
function sms_user_send_confirmation($account, $number, $options) {
- $code = rand(1000, 9999);
+ $code = rand(100, 999);
$data[0] = array(
'number' => sms_formatter($number),
'status' => 1,
Источник: http://www.drupal.ru/node/65940
Немного теории
Индекс (англ. index) — объект базы данных, создаваемый с целью повышения производительности поиска данных. Таблицы в базе данных могут иметь большое количество строк, которые хранятся в произвольном порядке, и их поиск по заданному критерию путем последовательного просмотра таблицы строка за строкой может занимать много времени. Индекс формируется из значений одного или нескольких столбцов таблицы и указателей на соответствующие строки таблицы и, таким образом, позволяет искать строки, удовлетворяющие критерию поиска. Ускорение работы с использованием индексов достигается в первую очередь за счёт того, что индекс имеет структуру, оптимизированную под поиск — например, сбалансированного дерева.
Википедия
Для тех кто не понял
Индекс в таблицах базы данных, это как предметный указатель в книге. Если не было бы предметного указателя, то вы бы листали всю книгу и просматривали текст каждой страницы в поисках какого-то определённого слова. В случае присутствия предметного указателя, вы быстро пробегаетесь по указателю, находите нужное слово и страницу и экономите время. Индекс в базах данных работает так же.
И чего ты этим сказать хотел?
Ещё работая в IT-Patrol была замечена интересная статистика, а именно:
старые сайты имели большие показатели неиндексированного чтения и проблемы с производительностью. Естественно, в голове это не совсем укладывалось, так как с виду вполне себе обычный сайт, но работает медленно и даёт нехилую нагрузку по БД.
Изначально это связывалось с кривыми модулями и другими физическими ущербностями.
Потом при обновлении fermer.ru я столкнулся с тем, что отпали индексы по fid в таблице files.
Время шло, вышла семёрка, начались апдейты на неё, при апдейте hr-portal.ru было замечено отпадение индексов и даже то, что некоторые индексы давно отсутствовали, но портал более менее нормально работал на шестёрке.
Дело в том, что между версиями меняется структура БД и при накладках во время апдейта, старый индекс удаляется за ненадобностью, а новый не создаётся, например, из-за дублей, так бывает в таблице blocks.
В итоге мы получаем с виду работающий сайт, но внутри имеем вот такие грабли
Как диагностировать?
Очень просто, Устанавливаем модуль Schema
Сразу хотелось бы предупредить что в версии модуля для Drupal 7 наблюдается баг с префиксами БД, данные которые даёт модуль по БД с префиксом некорректны.
Идём в admin/build/schema/report
Перед нами предстанет страница подобная этой
Легенда:
На желтом фоне пишутся предупреждения, в большинстве случаев они говорят о том, что авторы некоторых модулей не читали раздел про типы полей на api.drupal.org.
Филдсет Match несёт информацию о таблицах которые совпадают со схемой.
Mismatch сообщает нам о таблицах в которых проблемы со схемой.
Extra это таблицы в БД, которые не связаны схемой ни с одним модулем.
Рассмотрим подробнее Mismatch.
primary key: missing in database
Говорит о том, что потерян первичный индекс.
Ещё возможен вариант потери обычного индекса, например:
indexes content_type_uid: missing in database
И чего мне теперь делать, я же спать не буду?!
Вооружаемся текстовым редактором, просматриваем install-файлы модулей, смотрим там hook_schema() и восстанавливаем индексы соответствующими запросами:
ADD INDEX [index_name] (index_col_name,…)
или ADD PRIMARY KEY (index_col_name,…)
или ADD UNIQUE [index_name] (index_col_name,…)
или ADD FULLTEXT [index_name] (index_col_name,…)
Не забываем, что индексы бывают разных типов – составные, уникальные, простые и т.п.
ПЧП, КСС, это всё сложно для меня, может вы сможете помочь?
Я помогу вам за 1000р или эквивалент, я приведу отпавшие индексы в порядок и добавлю свои наработки.
И кстати, если вы клиент Патруля более трёх месяцев, то на вас распространяется 50% скидка, если вы пришли на IT-Patrol менее 3 месяцев назад, то стоимость составит 750р за проблемный сайт, просто напишите в техническую поддержку.
Прикрепленный файл
Размер
schema.png
30.24 кб
missingindex.png
22.48 кб
missingindex2.png
13.54 кб
Источник: http://www.drupal.ru/node/65583
Интересный твит пробегал в недавно от «детроидца», известного своими скринкастами… гугл переводит это: «Я думаю, что когда-нибудь люди поймут, что цены за обучение #Drupal нелепы.», полагаю, что речь идёт о прошедших курсах:
Drupal 7 Site Building
June 27, 28, 29 $1,350
Drupal 7 Theming
June 30 & July 1 $900
Entire Week of Workshops
June 27 – July 1 $2,000
Предлагаю проголосовать всем заинтересованным и предлагать свои варианты решения об образовании Drupalista в коментах.
Предлагаю русскому сообществу обсудить положение дел и высказать свои предложения, так как помимо начальных курсов, которые будут привлекать в наше дружное сообщество новичков есть насущная потребность в подобных курсах для обучения сотрудников компаний-разработчиков и, вероятно, частних лиц, желающих повысить свой профессиональный уровень не только на пока еще редких друпал-конференциях (друпал-кафе в россии пока закрыто
Один из найденных тренингов по конкурирующей платформе выставил на начальное обучение ценник (4500 вебинар и от 6500 за очное посещение), в ближайшее время на Drupal.Ru появится раздел посвященный обучению людей премудростям Drupal, пока полагаю в виде подобного ресурса от Acquia. Но об этом позже
PS: … на пути к Друпал-центру обучения и не только
Attached poll “Сколько Вы готовы платить за повышение квалификации, работая с Drupal?”.
Register or login to poll
Results:
Я нищий..: 38 голосов
20 000 – 15 000: 11 голосов
10 000 – 5 000: 23 голоса
не более 5 000: 32 голоса
Источник: http://www.drupal.ru/node/65015
Сделала на базе sphinxsearch небольшой поисковый модуль. Предложения и тестирование весьма желательны. Первоначально модуль делала под свои нужды, так что все лишнее, на мой взгляд, отсутствует . Если понадобятся какие-то доработки, буду рада помочь. На d.org будет выложен позднее. Портирование на 7 будет, после отлова мелких багов, при наличии таковых.
Основные отличия от базового:
возможность автоматической генерации файла конфигурации;
mysql вместо xmlpipe2;
минимальные настройки файла конфигурации через админку (работает при автоматической генерации);
UPD. Добавлено управление индексацией и демоном через админку. Функции внедрены по просьбе IT-patrol;
может еще что-то…
Настройка:
Копируем модуль в “sites/all/modules”.
Включаем в админке.
Настройка модуля на странице “admin/settings/advanced_sphinx”. Если вы хотите автоматически сгенерировать конфиг, то поставьте галочку “Generate a configuration file”. Далее необходимо указать полный путь к папке, в которой храниться sphinx.conf или папку в которой могут быть созданы конфиг и другие папки. Права на запись обязательны. Также на этой странице можете выбрать типы материалов по которым будет осуществлен поиск, если не выбрано, то ищет по всем. Обратите внимание, что при каждом сохранении настроек модуля конфиг будет обновлен, если включена его генерация.
запускаем индексатор /usr/bin/indexer –config /home/user/sphinx/config/sphinx.conf –all . Потом демон сфинкса /usr/sbin/searchd –config /home/user/sphinx/config/sphinx.conf . Все пути подставляйте свои.
проверяем работоспособность на странице “admin/settings/advanced_sphinx/check-connection”.
Добавляем для нужных ролей право на использование страницы поиска (”use advanced_sphinx”) в “admin/user/permissions”
Страница Advanced sphinx на github.
Источник: http://www.drupal.ru/node/65009
Всем привет,
была нужда сделать в таксономии базу всех регионов и городов.
Взял Классификатор адресов России (КЛАДР) здесь и сделал.
Выглядит примерно так – [img]
Использование:
Устанавливаем
Выбираем куда заливать /admin/settings/kladr
Нажимаем кнопку LOAD /admin/build/kladr , если не всё заливается сразу (там 200000 строк), нажимаем ещё раз
Если решили заливать в другой vocablary:
Создаем или Выбираем куда заливать /admin/settings/kladr
Нажимаем кнопку “Начать загрузку сначала”
Нажимаем кнопку LOAD /admin/build/kladr , если не всё заливается сразу (там 200000 строк), нажимаем ещё раз
Теперь подробнее:
Требуется “extension=dbase.so”
Вставляет два уровня терминов, первый – level1 из KLADR.DBF, второй населенные пункты от туда же.
Использует Batch API (Загрузку базы можно прерывать)
Версия 0.1
Возможны планы развития: интеграция с http://drupal.org/project/location , http://drupal.org/project/addresses и т.п.
Ну, и как обычно, disclaimer, используйте только на Ваш страх и риск.
Прикрепленный файл
Размер
drupal-kladr.png
543.36 кб
Источник: http://www.drupal.ru/node/64769
Blogsmith – простая и удобная тема для Drupal 6 в зеленых тонах. Если используете FCKeditor, то в его настройках CSS нужно выбрать define.css дабы избежать косяков с фоном в поле редактирования ноды.
- Две колонки
- Оптимизированная для SEO
- Простая и легкая в редактировании тема
Учусь верстать под Drupal и создал сайт cmsdrupal.org.ua на который буду выкладывать свои темы. Сейчас на нем можно посмотреть демо этой темы.
Прикрепленный файл
Размер
blogsmith.rar
39.98 кб
Источник: http://www.drupal.ru/node/64336
Пакетные операции дают возможность обрабатывать формы в течении нескольких запросов. Это предотвращает обрыв обработки изза тайм-аута РНР. Также пользователю предоставляется информация о ходе осуществления текущих операций.
Утверждают, что в первую очередь batch был разработан для гармоничной интеграции с Forms API, хотя часто его используют в обычных скриптах таких как update.php.
Представим, что нам необходимо осуществить обработку большого количества данных. Для начала мы создадим страницу в hook_menu.
Читать полностью…
Источник: http://www.drupal.ru/node/64097
Всем доброго времени суток. Пришло время предоставить отчет о конференции DrupalConf, которая прошла 23 апреля 2011 года в Москве.
Цифры:
Зарегистрированных участников конференции (заполнивших анкеты перед конференцией) – 224 участника.
География участников: Россия, Беларусь, Украина, Германия.
Инфы много, далее под катом.
Профессиональный состав:
Уровень владения Drupal:
Потребность в проф.консультациях:
Мы можем смело сказать что конференция получилась международной. За пару недель перед конференцией стало понятно, что количество участников придется как-то ограничивать – количество заявок к организатором намного превысило возможности зала. Как показала конференция – это был оправданный шаг, зал был заполнен полностью, но давки/неудобств не было, всем были обеспечены сидячие места.
На заметку гостям будущих конференций – заблаговременно регистрируйтесь на сайте конференции.
Результаты
На наш взгляд первая в России большая конференция по Drupal удалась. Это было бы невозможно, без активного сообщества. Наверное, основной вывод из всей конференции – сообщество в России есть, мы собрали более 240 участников, 30% участников работают с Drupal профессионально – по характеру вопросов к докладчикам было видно, что это представители студий и коллективов разработчиков, которые видят значительный рост в сфере Drupal-разработок, эта сфера притягивает все большие бюджеты, Drupal как CMS интересует все большее количество заказчиков. Что гарантирует – регулярные встречи Drupal-разработчиков неизбежны.
Организаторы
Артем Паньков
Андрей Постников
Маша Таран
HelpTeam
Сергей Бабушев
Дубовской Александр
Спонсоры
Информационные системы для бизнеса – Генеральный спонсор
Fast Lane Ventures
Radon
InternetDevels
Информационная поддержка
РАЭК
itmozg.ru
Интернет в цифрах
RMA
CMS Magazine
Системный администратор
Drupal.ru
Рейтинг Рунета
Докладчики:
Хотим выразить благодарность всем докладчикам конференции. Вы можете просмотреть видео докладов.
1. Вступительный доклад от Постникова Андрея (andypost): Drupal 7 и Drupal 8.
2. Доклад Вячеслава Касихина (Irbis), Ubercart — немного примеров из жизни.
3. Доклад Дубовского Александра (adubovskoy), Drupal для ленивых – как мы делаем больше за меньшее время.
4. Доклад от Алексея Костина (kostin), Drupal & SEO
5. Доклад Анны Федорук, Как построить разработку на Drupal
6. Доклад Антона Житарева (NaZg), Системы Электронного Документооборота на Drupal
7. Доклад Тараса Савчука и Романа Архарова (Romka), Forbs.ru
8. Доклад Клеры Виленской (Klera), Концепция единого модуля интеграции с соцсетями
9. Доклад Влада Савицкого (vladsavitsky), Сайт на Drupal за 15 минут
10. Доклад Александра Швеца (neochief), Разработка Drupal дистрибутивов
По предварительному расписанию у нас было 10 докладов, однако осталось время на экспромт-доклад (без предварительной подготовки), который вызвался рассказать Кинзябулатов Рамиль, посвященный интеграции Ubercart и 1C, ознакомиться с докладом вы можете на данной странице http://video.yandex.ru/users/vaspi/view/44/user-tag/drupalconf/
Отзывы
Вы можете ознакомиться с неформальными отзывами о конференции, которые разместили участники на своих сайтах и блогах:
http://www.drupal.ru/node/61188
http://graker.ru/news/2011/04/24/drupalconf_2011
http://prodrupal.ru/ru/node/89
http://shvetsgroup.com/ru/blog/drupalconf-moscow
http://www.ys1.ru/blog/otchet-o-drupalconf-moscow-2011
Следующий шаг
Данная конференция возымела большой резонанс в среде Drupal-разработчиков. Начали появляться региональные встречи, такие как Встреча DrupalSib в Новосибирске, встреча Южного Друпал сообщества в Краснодаре.
Есть потребность в организации регулярных небольших встреч в Москве – Drupal-кафе. В данный момент вы можете помочь с организацией Drupal-кафе, присоединяйтесь к обсуждению и ждем вас на встречах.
Слухи и домыслы
Хотим сказать, что нас воодушевило, какой отклик вызвала конференция DrupalConf. Есть решения о повторении конференции осенью/зимой 2011 или весной 2012. Каждый из вас может оказать значительную помощь и ускорить повторение DrupalConf в Москве. Как это можно сделать:
Вы можете просто опубликовать ссылку на этот отчет у себя на сайте или в блоге. Прежде всего конференция – это люди и потребность в обмене опытом. Мы можем совместными усилиями поддерживать резонанс о конференции.
Уже сейчас готовить доклад. Поверьте, написание качественного доклада занимает значительное время. В следующей конференции возможно разделение на потоки или на дни, необходимо больше хороших и интересных докладов.
Спасибо всем: читателям, слушателям, докладчикам, спонсорам. Будем рады встретиться на следующем DrupalConf!
Источник: http://www.drupal.ru/node/63916
Сделал модуль Locale Cache, ускоряющий переводы строк в Drupal.
Известно, что родной язык Drupal – английский. При каждом запросе к сайту движок берет английские строки в интерфейсе и заменяет их переводами для текущего выбранного языка. Данный модуль оптимизирует и ускоряет этот процесс. В результате ускоряется загрузка страниц, снижается количество запросов к базе и (в зависимости от настроек модуля) снижается потребление сайтом оперативной памяти.
Более подробное описание модуля на странице проекта.
Для работы требует патч ядра, так что прошу детей и беременных женщин отойти от монитора.
Пробуем, тестируем, и т.д. (снапшот скоро будет готов). Настройки модуля описаны в README.
14.06.11 Добавлена опция обновления кеша локалей с помощью cron
24.06.11 Создал первый релиз. Всем, кто использовал dev версию, рекомендуется обновится
Источник: http://www.drupal.ru/node/63680
Советую всем кто хотел бы заняться организацией интернет магазина. http://vimeo.com/24901121
Источник: http://www.drupal.ru/node/63623
Последние изменения на сайте полагаю требуют пояснений, поскольку мало кто читает changelog. Я по-прежнему исхожу из того, что на сайте сообщества может обсуждаться что угодно кроме друпала, раз это интересно его участникам. При условии что это не мешает основной тематике. Есть два варианта, сделать чтобы не мешало:
1. Жесткая модерация и превращение сайта в закрытый клуб (это на d.ru мы уже прошли).
2. Разрешение любого общения, но фильтрация топиков и офтопиков на отдельные по возможности непересекающиеся потоки.
Я по долгому опыту участия в d.ru и других интернет-сообществах окончательно пришёл к пункту 2. Не должно быть открытое сообщество замодерированным, если хочет привлечения новых участников. Новички бывают разные, но всегда с тупыми вопросами, тут ничего не попишешь. Бороться скорей нужно не с ними, а с теми “профи” кто злобно этих новичков отпинывает.
Я к сожалению по ряду причин последний год мог только минимально поддерживать работу сайта, и не хотел ввязываться в крупные изменения. И после разбирательств в прежней команде модераторов задействовать старую схему модерации также не было желания. Вскоре после ДрупалКонфа этого года в Москве в узком кругу московских друпалеров были намечены планы по перестройке сайта, постепенно вовлекаются люди готовые эти планы реализовывать. По наведению порядка на сайте в текущей реализации на D6 реализуется следующее:
1. Ограничить видимость форумов Курилка и Мусорка, в том числе для поисковиков.
2. Сделать средства для отправки нодов и комментариев в эти форумы.
3. С публикации снимать только спам и материалы явно нарушающие правила сайта.
Эффект от реализации п.1 можно видеть уже сейчас, офтопики не заметны, т.к. всё содержимое Курилки и Мусорки попадает мимо трекера, а Мусорка ещё мимо страницы /blog. Это на время работы сайта под D6, потом планируется использовать API прав доступа на ноды.
По п.2 ничего готового под D6 так и не нашлось, дописывается код текущих модулей для быстрого выноса нодов в Курилку->Мусорку, а также перенос туда комментов. Пока не придумал ничего лучшего, как создавать для перенесённых комментов ноды типа “архив” со ссылкой на исходное обсуждение.
Следите за changelog’ом
Источник: http://www.drupal.ru/node/63210
Простой и чистый шаблон под Друпал 6. Подойдет для блогов разной тематики.
Валидность XHTML и CSS
Включены ZEN tabs
Ссылки для редактирования блоков.
Демо можно посмотреть здесь http://infotech.org.ua
Скачать можно ниже
Прикрепленный файл
Размер
infotech.rar
42.87 кб
Источник: http://www.drupal.ru/node/63068
Вышли обновления безопасности Drupal. Drupal 7.1 и 6.21 закрывают уязвимость SA-CORE-2011-001, Drupal 7.2 и 6.22 также закрывают другие ошибки, не относящиеся к безопасности. Чтобы закрыть уязвимость SA-CORE-2011-001 достаточно проапдейтиться на 7.1/6.21.
Новость на drupal.org: http://drupal.org/drupal-7.2
Список изменений после Drupal 7.0: http://drupal.org/node/1168946
http://ftp.drupal.org/files/projects/drupal-7.2.tar.gz
http://ftp.drupal.org/files/projects/drupal-6.22.tar.gz
Источник: http://www.drupal.ru/drupal-7.2
English
This is module implements import/export for the application 1c 8.x. It`s a complementary solution for 1C 8.x handler. It`s use Commerce ML 2 format such XML. Else this module work as batch process and use cron for the queue.
Russian
Данный модуль позволяет синхронизировать 1С 8.x Предприятие + 1С управление торговлей (УТ) с магазином Ubercart 2. В синхронизации участвуют:
1C -> Ubercart 2 (Прайс – лист с ценовыми предложениями)
1C -> Ubercart 2 (Категории)
1C <- Ubercart 2 (Ордера от магазина)
1C <- Ubercart 2 (Информационные данные о покупателях)
Настройки
старая глючная версия
beta 4
Прикрепленный файл
Размер
cmlservice.2.09.jpg
32.08 кб
cmlservice.2.09-settings.jpg
49.03 кб
2011_05_22_17-06-16-130.jpg
54.43 кб
Источник: http://www.drupal.ru/node/62395
2я часть, теперь про стандартные обработчики views.
плюсуем, комментим
Источник: http://www.drupal.ru/node/62047
Вашему вниманию предлагается статья, в которой описывается способ встраивания стандартного функционала форм Drupal в редактор BUEditor для удобного добавления ссылок на внутренние материалы сайта.
Начну с дисклеймера. К сожалению, не имею возможностей разбирать весь процесс создания по косточкам, т.к. было потрачено немало времени и допущено и исправлено множество ошибок прежде, чем получился результат, достойный публикации. Тратить это время здесь смысла большого не имеет, лучше идти дальше. Вот решение – пользуйтесь, экспериментируйте, дорабатывайте, делитесь. Здесь же постараюсь описать все, что необходимо для реализации задуманного функционала. Описание дается для блоками, а не построчно.
Инструменты
Module API
Drupal form API
Ajax
JQuery
BUEditor
Предыстория
Основным редактором на нашем научном портале является BUEditor, т.к. есть твердая необходимость форматировать текст с использованием модуля DruTeX. Ну и просто постараться сохранить предсказуемый вид для исходных текстов (в отличие от wysiwyg-редактора) для их дальнейшего использования по-жизни. По мере наполнения появилась необходимость для кросс-линкинга между статьями, терминами словаря и другими видами материалов. Все это осложнялось отсутствием таких возможностей для BUEditor, в отличие от других редакторов, для которых есть такой модуль как Linkit. Потратив некоторое время на изучение матчасти (Drupal form API), было принято решение, что во что бы то ни стало нужно прикрутить стандартную форму Drupal к диалогам BUEditor. Ведь autocomplete уже реализован, стили сделаны, а пока форма ждет ответа, там бегает кружёк и выпадет готовая менюха – вообщем просто и красиво.
Первым делом начал искать, что было сделано. Например – http://www.drupal.ru/node/12619, но по делу там ничего не нашел. Начал экспериментировать с маленьким неофициальным модулем ajax-demo и его autocomplete-возможностями. Все быстро встало на свои места. Дальше появился вопрос – как заставить друпаловскую форму залезть в диалог редактора?
Кстати, бился с поиском до последнего, т.к. не сторонник, чтобы на сайте был такой hand-made. Но готовых решений нет и был вынужден изменить своим же принципам.
Hands on
Итак, приступаем.
Первым делом надо сделать свой модуль (назвал его callbacks), в который войдет основной функционал, а именно:
Описание формы
Описание функций обращения к базе
Клиентский js-функционал
Стили ответа
callbacks.info
; $Id$
name = callbacks module
core = "6.x"
version = "6.x-1.1"
callbacks.module
<?php
// $Id$
/**
* Implementation of hook_init().
*/
function callbacks_init(){
variable_set('callbacks_link_form_var', drupal_get_form('callbacks_link_form'));
}
/**
* Implementation of hook_menu().
*/
function callbacks_menu() {
return array(
'callback/link' => array(
'access arguments' => array('access content'),
'page callback' => 'callbacks_link_func',
'type' => MENU_CALLBACK,
),
);
}
/**
* Retrieve a pipe delimited string of autocomplete suggestions for existing users
*/
function callbacks_link_func($string) {
$matches = array();
$dst = "";
$result = db_query_range("SELECT nid, language, type, title FROM {node} n WHERE LOWER(n.title) LIKE LOWER('%s%%')", $string, 0, 10);
while ($node = db_fetch_object($result)) {
$get_alias = db_query("SELECT dst FROM {url_alias} WHERE src = 'node/%s'", $node->nid );
if( $alias = db_fetch_object($get_alias) )
$dst = $alias->dst;
else
$dst = "node/" . $node->nid;
$matches[$node->nid] = array(
'type' => check_plain($node->type),
'title' => check_plain($node->title),
'alias' => check_plain($dst),
'lang' => check_plain($node->language),
);
}
$results = array();
if (count($matches)) {
foreach( $matches as $key_nid => $values ) {
$text = '<div class="clear-block">';
// $text .= '<div class="callbacks-nid">['. $key_nid .']</div>';
$text .= '<div class="callbacks-title">'. $values['title'] .'</div>';
$text .= '<div class="callbacks-type">['. $values['type'] . ':' . ( $values['lang'] ? $values['lang'] : 'any' ) . ']</div>';
$text .= '<div class="callbacks-alias">'. $values['alias'] .'</div>';
$text .= "</div>";
$dst = $values['alias'];
$results[$dst] = $text;
}
}
drupal_json($results);
}
/**
* Defines a form.
*/
function callbacks_link_form() {
drupal_add_js(drupal_get_path('module', 'callbacks') . '/js/callbacks.js');
drupal_add_css(drupal_get_path('module', 'callbacks') . '/css/callbacks.css');
return array(
'link-path-ac' => array(
'#autocomplete_path' => 'callback/link',
'#title' => t('URL or Title'),
'#description' => t('Start type title to get its internal URL'),
'#type' => 'textfield',
'#required' => TRUE,
),
'link-text' => array(
'#title' => t('Link text'),
'#description' => t('Select text in editor or enter link text'),
'#type' => 'textfield',
),
'cancel' => array(
'#value' => t('Cancel'),
'#attributes' => array('class' => 'callbacks-button'),
'#type' => 'button',
),
'add-link' => array(
'#value' => t('Add link'),
'#attributes' => array('class' => 'callbacks-button'),
'#type' => 'button',
),
);
}
?>
hook_init() – нужен, чтобы заранее подготовить форму, иначе BUEditor ее не съест.
hook_menu() – это осознанная необходимость для autocomplete в Form API.
callbacks_link_func($string) – стандартный функционал для json-ответов. Здесь можно выбирать из базы любые поля и отдавать их для отображения, в данном случае поиск ноды в базе происходит по заголовку, но этим, как вы понимаете, можно не ограничиваться. Тут же происходит стилевое оформление – дело вкуса прячется в конце функции. Да, кстати, здесь приходится делать двойной запрос к базе, т.к. все, что мы делаем, мы делаем для живых людей и поэтому подставлять красивый alias вместо ссылки вида node/435 насущная необходимость. Для красоты (см. картинку в конце) выводится название, алиас, тип материала и язык.
callbacks_link_form() – описываем форму по-друпаловски: быстро, просто, удобно, с аутокомплитом.
JS часть. Файлик js/callbacks.js
Drupal.behaviors.callbacks = function(){
$('#edit-add-link').unbind().click(
function(){
var url = $('input#edit-link-path-ac').val();
var text = $('input#edit-link-text').val();
E = BUE.active;
E.replaceSelection( '[url'+ (text ? ('='+ url) : '') +']'+ (text || url) +'[/url]' );
E.dialog.close('fadeOut');
return false;
}
);
$('#edit-cancel').unbind().click(
function(){
BUE.active.dialog.close('fadeOut');
return false;
}
);
$(’#edit-add-link’).unbind().click() – отцепляем стандартный submit и говорим форме, что же нам от нее нужно.
$(’#edit-cancel’).unbind().click() – то же самое, но для кнопочки Cancel, для порядка.
CSS часть. Файлик css/callbacks.css
.form-radios .form-item {
display: inline;
}
.callbacks-nid {
float: left;
}
.callbacks-title {
float: left;
}
.callbacks-alias {
color: #333;
font-size: 0.9em;
clear: both;
margin-bottom: 5px;
font-weight: bold;
}
.callbacks-type {
float: right;
font-size: 0.8em;
}
.callbacks-button {
float: right;
}
Тут самая скука, расставить цвета и отступы.
Вторым делом добавить php-кнопку в BUEditor.
<?php
php:
$button_form = drupal_to_js(variable_get('callbacks_link_form_var', ''));
return "js:
var S = E.getSelection();
E.dialog.open('Internal linking', $button_form, 'fadeIn');
$('input#edit-link-text').val( S );
Drupal.attachBehaviors($button_form);
";
?>
variable_get() – важен, т.к. вариант с drupal_get_form() в данном случае приводит к непредсказуемым результатам и его использовать нельзя.
drupal_to_js() – важен, т.к. иначе форма выдается в неадаптированном для js виде.
Drupal.attachBehaviors() – важен, т.к. без этой функции форма не слушается и плохо себя ведет.
Все
По идее, этого достаточно, чтобы начать экспериментировать. В оригинальном виде у меня используются две формы и, соответственно, все описанное сделано дважды в одном модуле. Если все это после доведения до ума выльется в новый модуль для BUEditor – будет приятно, и, надеюсь, не только мне.
Буду рад получить отзывы и предложения, а так же все сообщения об ошибках. В моем случае некоторые из них проявлялись через месяц-другой использования. Но в целом все довольно стабильно. Если нужен исходник – выложу или пришлю, но там почти все так же как описано.
Выглядит форма таким образом:
А результат ее использования не менее красив:
Прикрепленный файл
Размер
callbacks_form.png
6.79 кб
callbacks_form_2.png
34.29 кб
Источник: http://www.drupal.ru/node/61991
Модуль выставления счета “сбербанка”
функциональность
Создание платежки на базе шаблона
Защита платежки от просмотра третьими лицами
Сохранение платежки в личном кабинете.
Отправка платежки на почту клиента.
Отправка платежки на почту компании, на адрес. куда поступают письма с заказами.
Скачать http://css.mirocow.com/projects/sberbank/files
Реализация
1. Создание платежки на базе шаблона
Платежка формируется из JPG темплэйт файла. Заполнение платежки происходит с помощью imagettftext.
Данные платежки имеют защищенный вид хранения. Принцип формирования платежки аналогичен ImageCache.
Защита платежки строится след принципом. Создается каталог хранения платежек sites\default\files\sberbank.
В нем создаются каталоги с именем UID пользователя, в которых лежат хеши платежек вида 55_fe8a0ea4ce326398482061ad5eb1e58d.jpg.
Где fe8a0ea4ce326398482061ad5eb1e58d строится из md5(номера ордера + drupal_private_key), благодаря чему, хеши всегда будут иметь уникальный вид. (подбор хеша невозможен – защита от просмотра третьими лицами)
2. Сохранение платежки в личном кабинете
Для доступа к платежам используется URI вида http:// имя_сайта /sberbank/номер ордера.jpg. Данная ссылка и сама картинка выводится в управляющем меню счета и доступна владельцу счета или администратору магазина.
3. Отправка платежки на почту клиента
Для шаблона писем формируются токены след вида: защищенный и прямой
Примеры:
* http:// имя_сайта /sites/default/files/sberbank/58.png – защищенный
* http:// имя_сайта /sites/default/files/sberbank/5/55_fe8a0ea4ce326398482061ad5eb1e58d.jpg – полный путь до файла платежки
4. Отправка платежки на почту компании, на адрес. куда поступают письма с заказами
Данные формируются аналогично пункту 4
Требования
* Используемые модули (зависимости): Token
* Необходимые библиотеки: GD
Модуль настроен и работает тут http://motodart.ru
Подробнее тут: http://css.mirocow.com/projects/sberbank/wiki/Wiki
Прикрепленный файл
Размер
sberbank.gif
2.82 кб
Источник: http://www.drupal.ru/node/61778
Сделал обещанный модуль.
что он себе представляет:
Модуль называется Ubercart Alter Sell Price. Находиться во вкладке ubercart – extra. Копируем – Включаем. Дальше в материале типа Product появляется возможность писать текст вместо Sell Price причем остается и сам Sell Price. Во вьесе есть дополнительное поле, которое выводит представление альтернативной цены, так и называется – Alter Sell Price.
Как работает во вьесе product – заменяем поле Product: Sell price на поле Product: Alter Sell Price. Нажимаем саве и будет нам щасье.
Product: Alter Sell Price – выводит текст продукта и если в настройках продукта снята галочка “Использовать Alter Sell Price” – то выводит реальную цену продажи.
В чем отличие от других: Альтернативную цену можно писать для каждого продукта разную.
p/s/ Это первый модуль – поэтому прошу строго не судить .. конструктивную критику приветствую..
Все всем спасибо.
Прикрепленный файл
Размер
ubercart_alter_price.zip
8.37 кб
Источник: http://www.drupal.ru/node/61512
Всем привет!
Написал модуль для логирования отправок любых форм. Вы просто указываете id формы, и модуль прицепляется к ней сам. После этого, любая отправленная в форму информация будет сохранена в отдельной таблице базы данных, и в любое время ее можно будет посмотреть.
Зачем это нужно?
Вариант 1. Отслеживание введенных значений. Не всегда вся введенная в форму информация сохраняется. Бывает, что на ее основе делаются какие-либо вычисления, и в базу сохраняются только результаты этих вычислений. Если вы хотите посмотреть, что же было введено в качестве исходных данных, то этот модуль для вас.
Вариант 2. Вы разрабатываете большую, сложную форму, многоступенчатую да с аяксом. А то и не одну и не две, в рамках какого-либо проекта. Или нескольких проектов. Чтобы не писать для каждой из этих форм свой отдельный submit-хендлер, который может быть просто огромным, да и во многом одинаковым для подобных форм, вы просто прицепляете этот модуль, и всю работу по сохранению введенной информации он берет на себя. В модуле предусмотрено API для этого.
Немного подробнее можно прочитать на странице модуля formsave (он пока в песочнице).
Немного скриншотов:
Скриншот экрана настроек
Скриншот списка отправок
Скриншот одной отправки
Если вы хотите видеть этот модуль в качестве полноценного проекта на drupal.org, отпишитесь, пожалуйста, в этой заявке на получение статуса Full project. то добро пожаловать на страницу проекта formsave
Источник: http://www.drupal.ru/node/61297
Социальные сети в последнее время становятся всё более популярными и LiveLournal является одним из лидеров по числу пользователей.
Но известные события, в результате которых недавно ЖЖ был недоступен достаточно продолжительное время, обнажили суровую правду жизни: livejournal.com – это обычный сайт, с которым может произойти всё, что угодно и нет никаких гарантий, что Ваш блог на этой площадке или его содержимое “внезапно” не уйдет в небытие. Подобное встречается в ЖЖ сплошь и рядом.
Впрочем, вылететь может и Ваш stand-alone блог. К примеру, можно элементарно забыть продлить регистрацию домена (что случилось недавно с хаброй) или, не дай Бог забыть продлить хостинг. При этом в лучшем случае Ваш сайт будет недоступен некоторое время, а в худшем случае хостер может вообще снести его со всем содержимым.
Запасной аэродром для сохранения контента и юзеров в этом случае придется как нельзя кстати. Данный факт и был одним из мотивов для создания этой сборки.
Инсталляционный профиль NewsMaker предназначен как для ЖЖ блогеров, так и для владельцев независимых сайтов. Он позволяет в автоматическом режиме дублировать сообщения из Вашего stand-alone блога, сделанного на Drupal в Ваш блог или комьюнити на площадке LiveJournal. Аналогично Вы можете сохранять сообщения из Вашего ЖЖ в Ваш блог на Drupal, то есть зеркалить их.
Установка и настройка
Несмотря на то, что в этом профиле применен нестандартный инсталлятор, разработанный и реализованный моим партнером Валентином Ворониным http://shaman.asiadata.ru, его установка не отличается от стандартной друпальской.
Скопируйте архив в корень будущего сайта и распакуйте его средствами административной панели хостинга или разархивируйте в любую папку на Вашем компьютере, а затем скопируйте все файлы на сервер (во втором случае процесс копирования может занять длительное время).
На первом этапе установки сайта выберите инсталляционный профиль “NewsMaker”
Дальше установка происходит как обычно.
Если Вы хотите не только отправлять сообщения из своего блога на Drupal’e в LiveJournal, но и импортировать посты и комментарии, публикуемые в Вашем ЖЖ, на Ваш друпал-сайт, то на Вашем сервере должны быть установлены Perl модули, необходимые для правильной работы модуля LJsync.
Если же Вам нужен только кросспостинг в ЖЖ, то после инсталляции и входа на сайт просто отключите LiveJournal Sync в /admin/build/modules.
Дальнейшая настройка сводится к следующему:
Зайдите в свой профиль /user и укажите там свой логин и пароль доступа в LiveJournal
Зайдите в настройки модуля LiveJournal Sync /admin/settings/ljsync (если Вы решили его использовать) и нажмите кнопку “Вернуться к исходным” Здесь же Вы можете выбрать нужный формат импорта данных, словарь для импортируемых тегов и тип материала для импорта.
Зайдите по ФТП в папку Вашего сайта /sites/default/files/ljsync и создайте там файл вида логин_жж-lj.xml (тот, что Вы указывали в своем профиле).
На этом процесс установки и настройки можно считать завершенным. Да, и не забудьте установить права доступа 777 к папке /tmp в корне сайта.
Возможности, которые Вы получаете
Помимо перекрестного кросспостинга, о котором написано выше, Вы получаете еще ряд дополнительных возможностей:
Домашнюю страницу aka igoogle c возможностью включения, сворачивания, перетаскивания блоков
Удобный Wysiwyg текстовый редактор для добавления и редактирования материалов, с возможностью внутренней перелинковки и мультизагрузкой файлов любых типов, причем не только изображений (расширения загружаемых файлов, их размеры, объемы можно настраивать через админку). При изменении размера изображения автоматически формируется ссылка от уменьшенной копии к исходному изображению.
Простой способ подключения неограниченного количества лент новостей, причем не только из LJ, но с любого другого сайта, имеющего RSS ленту. При этом в анонсах новостей автоматически ограничивается количество символов, изображения уменьшаются, дубли новостей удаляются. Впрочем, есть возможность просмотра новостей в исходном виде или в виде заголовков.
В сборке предварительно настроены роли, которые вы можете давать своим пользователям.
Роли позволяют вам настроить безопасность и администрирование Вашего сайта на Drupal. Роли определяют группы пользователей, которые имеют некоторые привилегии, определяемые правами доступа.
Анонимный пользователь: эта роль используется для пользователей, которые не зарегистрированы или не вошли в систему. По умолчанию у них есть только возможность просмотра общедоступного содержимого.
Зарегистрированный пользователь: автоматически назначается всем пользователям, вошедшим на сайт со своим именем и паролем или по OpenID. По умолчанию имеют возможность только добавлять комментарии.
Автор: имеет возможность добавлять записи в свой блог и управлять ими. Владельцу блога рекомендуется создать для себя дополнительный аккаунт с этой ролью и постить из него.
Модератор: может удалять записи всех авторов.
Редактор: помимо удаления может редактировать все записи.
Администратор: имеет расширенные права для управления настройками сайта.
Разработчик: кроме доступа к настройкам имеет возможность работать с PHP скриптами на сайте.
User#1: Назначает права доступа для ролей и имеет доступ ко всем настройкам.
Имеющиеся проблемы
Так и не решена окончательно проблема в модуле LJsync с дублями записей, отправляемых из ЖЖ в Drupal. Пока что дубли удаляются постфактум самописным модулем, запускаемым по крону. В дальнейшем постораемся решить эту проблему более корректно.
Не публикуются комментарии к записям, изначально публикуемыемым в сайте на Drupal, а потом отправляемым в ЖЖ.
Буду благодарен, если сообщество поможет с решением этих проблем.
Пример работающего на этой сборке сайта: http://newsmaker.su/
Скачать инсталляционный профиль можно у меня в блоге
Там же будут размещаться все модификации и обновления этого профиля.
UPD Во второй версии сборки добавлена интеграция на уровне API c социальными сетями Vkontakte, Мой Мир @ Mail.ru, Facebook, Twitter. Теперь Вы можете отправлять свои сообщения не только в ЖЖ, но и в вышеперечисленные соц.сети. В отличие от стандартного кросспостинга в Facebook и Twitter через LJ, в случае применения этой сборки вы можете добавлять свои комментарии и хэш-тэги к своим записям. Решены проблемы с дублями постов и комментариев.
Актуальная версия
newsmaker-6.x-2.0-rc1.tar.gz (10.32 Мб).
http://ipload.ru/file/9113
или
newsmaker-6.x-2.0-rc1.zip (12.85 Мб).
http://ipload.ru/file/9113
————предрелизы————————
newsmaker-6.x-1.0-beta3.tar.gz (10.78 Мб).
http://www.ipload.ru/file/9095
или
newsmaker-6.x-1.0-beta3.zip (13.1 Мб).
http://www.ipload.ru/file/9094
newsmaker-6.x-1.0-beta2.tar.gz (10.38 Мб).
http://ipload.ru/file/9082
или
newsmaker-6.x-1.0-beta2.zip (12.61 Мб)
http://ipload.ru/file/9081
newsmaker-6.x-1.0-beta1.tar.gz (10.34 Мб)
http://ipload.ru/file/9073
или
newsmaker-6.x-1.0-beta1.zip (12.57 Мб)
http://ipload.ru/file/9074
Источник: http://www.drupal.ru/node/60990
Поставил drupal commerce, потыкал несколько дней, понял – весч! Все круто, все легко и гибко настраивается, легко имортируется из csv и xml при помощи модуля feeds. Вообщем то что надо! за одним НО, как мать его создать каталог?
Пробовал ставить разные модули, искать решение на d.org – ничего толового не нашел, побился головой об стену, и полез во …. views
Приступаем:
1) идем на страницу admin/structure/taxonomy и созадем словарь catalog
– на странице admin/structure/taxonomy/catalog/fields добавляем поле c изображением, например, imagecatalog
– добавляем термины, загружая и зображения и создавая иерархию словаря
2) идем на страницу admin/structure/views и включаем представление Taxonomy term
3) идем на страницу admin/structure/views/add и создаем новое представление
выбираем показатель – термины таксономии, и тип – наш словарь catalog
задаем заголовок страницы
путь ставим taxonomy/term/%
отображение ставим grid (сетка)
элементов для отображения ставим 12 – так как по умолчанию в grid 4 столбца, соответственно указываем значение кратное 4
нажимаем “продолжить и редактировать”
4) начинаем редактировать представление:
4a) в блок “Fields” добавляем поле изображение “imagecatalog”, настраиваем его по своему вкусу
расскрываем правую колонку ‘Advanced’
4б) добавляем Contextual filters
указываем значение – Таксономия: вложение
и добавляем ставим галлку – чтобы при не существующем термине показывалась 404 ошибка (этого можно не делать)
Сохраняем фильтр
таким образом мы перекрыли отображение страницы термина. Теперь по адресу taxonomy/term/id_термина будут отображаться его дочерние термины с их изображениями в виде сетки.
Но если у термина не будет дочерних терминов – ничего отображаться не будет. Такая ситуация нас не устраивает, поэтому делаем следующее:
5) Добавляем no results behavior
ставим галку возле views area
нажимаем далее и указываем какое представление может будет выводиться если у термина нет дочерних терминов, а именно taxonomy_term Dispaly: default
не забываем отметить inherit cotextual filters – это означает что аргумент (id термина) будет передаваться представлению, которое будет вызываться.
сохраняем поле, сохраняем представление.
Как это работает?
если у термина есть дочерние термины – грузится вид catalog
если нет – грузится вид taxonomy term
если использовать с модулем taxonimy menu – получается каталог как на сайте ситилинка
Как сделать пункт меню?
вариант 1: делаем все термины таксономии дочерними какого-то одного, и указываем в меню ссылку на этот термин
вариант 2: берем модуль taxonomy menu, и выводим в блоке ссылки на категории
Ожидаемые проблемы:
1) На странице термина не отображаются его дочерние термины
Причина: представление taxonomy term перекрывает по весу наше представление
Выход: отключить отображение page у представления taxonomy term
2) Помимо словаря catalog есть другие словари, для них должно быть свое отображение
Выход: ждем, иди сами портируем модуль taxonomy redirect
- задаем разные пути для разных словарей
- клонируем представление taxonomy term, меняем в нем путь на заданный в taxonomy redirect
- меняем представление catalog – указываем новые пути, и меняем no results behavior на новое представление
Прикрепленный файл
Размер
1.png
10.72 кб
2.png
14.02 кб
3.png
14.1 кб
4.png
8.96 кб
5.png
8.25 кб
6.png
13.07 кб
7.png
6.52 кб
8.png
6.65 кб
Источник: http://www.drupal.ru/node/60911
UPD. Как выяснилось из комментариев, модуль ckeditor с версии 6.x-1.3 официально поддерживает elfinder. Таким образом, всё написанное относится к возможному способу вывода “быстрой” кнопки elfinder’a на тулбар.
UPD2(08/05/2011). Плагин доработан до автоматического определения типа файла, возвращаемого elFinder
Нужен был файлменеджер/мультизагрузчик для редактора CKeditor (именно для drupal-модуля).
Я обычно использую IMCE и стал искать дополнения к IMCE, поддерживающие мультизагрузку.
Нашёл только IMCE Swfupload, но он ещё в бета-стадии и требует установки дополнительных модулей. В общем, не устроил.
Зато как-то неожиданно открыл для себя elFinder.
Менеджер показался очень удобным (на мой взгляд, даже получше IMCE).
Мультизагрузка, drag&drop, создание-удаление директорий, файлов. Автоматические тамбы картинок, ну и в целом как-то юзабельнее выглядит.
CKEditor (по крайней мере 6.x-1.3) позволяет интегрировать IMCE как “быструю” кнопку на тулбар (отдельно от диалога выбора ссылки/картинки/файла). Просто нужно раскомментировать соответствующие определения в ckeditor.config.js и убедиться что присутствует папка imce в /modules/ckeditor/plugins
Я стырил это решение и наскоро адаптировал его под elFinder в виде скромного плагина-кнопки (elFinder).
Результат: на тулбаре имеется самодельная кнопочка, по клику на которой сразу открывается окно этого файлового менеджера (т.е. минуя диалог выбора адреса).
После выбора файла (двойной щелчок или команда меню и т.д.) в менеджере, он закрывается и ссылка возвращается в CKeditor в обвязке тегов.
В общем, почти всё как в “обычном” elFinder или IMCE.
Желающие могут пойти дальше и доработать решение плагина. Для примера сравните код приложенного плагина и стандартного плагина кнопки IMCE (функция setFile()): /modules/ckeditor/plugins/imce/plugin.js
Потребуются модули:
- модуль CKEditor
- модуль elFinder
- сам файлменеджер elfinder (он отдельно от модуля).
Плагин кнопки в архиве приложен к посту. Описание установки – в файле README.TXT архива.
После установки не забыть установить необходимые разрешения ролям для доступа к elFinder, CKEditor (если вы это ещё не сделали).
Отображение кнопки не зависит от разрешений.
То есть – если вы запретили какой-то роли использовать elFinder, то кнопка не исчезнет с панели. Просто по клику на ней будет обычный “У вас нет прав для просмотра и т.д.”.
ps. И это… Отписывайтесь, пожалуйста, у кого что получилось. Будут доработки – велкам + респект и уважуха
Прикрепленный файл
Размер
elfinder.zip
2.72 кб
Источник: http://www.drupal.ru/node/60796
Так раз и навсегода.
Во первых модуль FCKeditor 6.x-2.1 работает с FCKeditor 2.6.6
УСТАНОВКА НА DRUPAL
скачать Drupal модуль управления FCKeditor 6.x-2.1 скачать
распаковать папку “fckeditor” из архива в папку “/modules”
(на вашем сайте в папке “modules” должна появится папка fckeditor)
качать FCKeditor 2.6.6 скачать
распаковать содержимое папки fckeditor архива в /modules/fckeditor/fckeditor
(не перепутайте и не создавайте еще одну папку, а копируйте содержимое архива)
ВКЛЮЧАЕМ FCKeditor
Заходим в ваш сайт как администратор
выбираем пункт меню администратора модули
в открывшемся разделе ищем одноименный модуль
включаем модуль (выбираем галочкой и жмем сохранить)
заходим в меню управление пользователями/роли
выбираем роль Зарегестрированный пользователь, отмечаем галочкой fckeditor – использовать fckeditor, сохраняем права доступа
заходим в меню настройки сайта, там выбираем fckeditor, если нет никаких сообщений идем к 9му пункту, если есть к следующему
если выходит сообщение:
The FCKeditor component appears to be not installed correctly, because modules/fckeditor/fckeditor/fckconfig.js could not be found.
Please go to the Домашняя страница FCKeditor to download the latest version. After that you must extract the files to modules/fckeditor/fckeditor and make sure that the directory modules/fckeditor/fckeditor/editor and the file modules/fckeditor/fckeditor/fckeditor.js exist. Refer to the readme.txt for more information.
ПРОВЕРЬТЕ ПУНКТЫ 3 и 4 раздела установки, причем внимательно!!
ИДЕМ в ПРОФИЛИ (внизу написано крупно) к профилю Autorezed Зарегистрированный пользователь-(тот самый которому мы настроили роль в п.5 и 6.)жмем изменить, появляется окно настройки FCKeditor
И ТАК НАСТРОЙКА FCKeditor
первая вкладка Основные настройки здесь задаем имя профиля FCKeditor, кому разрешено пользоваться (можно определенной группе ролей запретить пользоваться модулем, другой разрешить, третьей разрешить использовать только в определнных местах и т.п *
вторая вкладка Безопасность здесь мы задаем условия безопаности, фильтровать или не фильтровать код в FCKeditor
третья вкладка Настройки видимости здесь мы указываем для какой страницы, раздела или области сайта можно включить модуль (эта часть ограничивает доступ к FCKeditor указанным в первой вкладке ролям пользователей)
четвертая вкладка это Внешний вид редактора здесь настраиваем стиль отображения, скин эдитора
пятая вкладка Редактор ввода здесь мы управляем режимом ввода (первая выборка действия редактора на Enter, вторая выборка действия редактора на SHift+Enter и т.п)
шестая вкладка Настройки файлового браузера здесь выбираем через ккакой ф.б вы хотите загружать файлы, изображения и flash-ролики.
седьмая вкладка Стиль и файлы шаблонов здесь управляем шаблонами отображения редактора и стилями
Ну вот вроде все..
единственно незнаю как настроить содержимое панели FCKeditora…
Attached poll “У вас получилось установить и включить:?”.
Register or login to poll
Results:
с первого раза: 1 голос
со второго раза: 2 голоса
с третьего раза: 1 голос
никак не получается: 1 голос
Источник: http://www.drupal.ru/node/60770
Иногда возникает необходимость для удобства ввода данных создать поле с автозаполнением(autocomplete field). Примерами таких полей могут быть виджеты для cck-полей Node reference i User reference.
Рассмотрим программное создание такого рода полей. Согласно Drupal Forms API reference свойство #autocomplete_path можно добавить только для элемента texfield. Это свойство определяет путь, по которому автоматически включенный JavaScript-код Друпала пошлет HTTP-запросы, используя JQuery.
Читать полностью…
Источник: http://www.drupal.ru/node/60563
Оглавление
Устанавливаем клиент и сервер
sudo apt-get install munin munin-node
переходим в каталог доступных плагинов munin
cd /usr/share/munin/plugins
скачиваем плагины для nginx
sudo wget -O nginx_request http://exchange.munin-monitoring.org/plugins/nginx_request/version/2/download
sudo wget -O nginx_status http://exchange.munin-monitoring.org/plugins/nginx_status/version/3/download
sudo wget -O nginx_memory http://exchange.munin-monitoring.org/plugins/nginx_memory/version/1/download
скачиваем другие плагины
sudo wget -O multimemory http://exchange.munin-monitoring.org/plugins/multimemory/version/3/download
sudo wget -O sshd_log http://exchange.munin-monitoring.org/plugins/sshd_log/version/1/download
sudo wget -O php5-fpm_status http://exchange.munin-monitoring.org/plugins/php5-fpm_status/version/1/download
sudo wget -O mysql_connections http://exchange.munin-monitoring.org/plugins/mysql_connections/version/1/download
sudo wget -O mysql_qcache http://exchange.munin-monitoring.org/plugins/mysql_qcache/version/1/download
sudo wget -O mysql_qcache_mem http://exchange.munin-monitoring.org/plugins/mysql_qcache_mem/version/1/download
делаем плагины исполняемыми
sudo chmod +x nginx_request
sudo chmod +x nginx_status
sudo chmod +x nginx_memory
sudo chmod +x multimemory
sudo chmod +x sshd_log
sudo chmod +x php5-fpm_status
sudo chmod +x mysql_connections
sudo chmod +x mysql_qcache
sudo chmod +x mysql_qcache_mem
выходим из директории
cd ~
включаем плагины
sudo ln -s /usr/share/munin/plugins/nginx_request /etc/munin/plugins/nginx_request
sudo ln -s /usr/share/munin/plugins/nginx_status /etc/munin/plugins/nginx_status
sudo ln -s /usr/share/munin/plugins/nginx_memory /etc/munin/plugins/nginx_memory
sudo ln -s /usr/share/munin/plugins/multimemory /etc/munin/plugins/multimemory
sudo ln -s /usr/share/munin/plugins/sshd_log /etc/munin/plugins/sshd_log
sudo ln -s /usr/share/munin/plugins/php5-fpm_status /etc/munin/plugins/php5-fpm_status
sudo ln -s /usr/share/munin/plugins/mysql_connections /etc/munin/plugins/mysql_connections
sudo ln -s /usr/share/munin/plugins/mysql_qcache /etc/munin/plugins/mysql_qcache
sudo ln -s /usr/share/munin/plugins/mysql_qcache_mem /etc/munin/plugins/mysql_qcache_mem
Некоторые плагины имеет не unix формат, чтобы он заработал в Ubuntu открываем его
sudo vim /usr/share/munin/plugins/sshd_log
и пишем команду для vim редактора (не в документ пишем а именно команду)
:set ff=unix
Редактируем дефолтовый конфиг Nginx
sudo vim /etc/nginx/sites-available/default
Добавляем новые location для localhost
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
location /fpm-status {
access_log off;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME /fpm-status;
include fastcgi_params;
allow 127.0.0.1;
deny all;
}
Перезагружаем nginx
sudo /etc/init.d/nginx stop && sudo /etc/init.d/nginx start
Далее, необходимо указать плагинам, куда ходить за статистикой и тому подобное
sudo vim /etc/munin/plugin-conf.d/munin-node
Добавляем следующее
[nginx*]
env.url http://localhost/nginx_status
env.ua nginx-status-verifier/0.1
[multimemory]
env.os linux
env.names nginx php5-fpm mysqld
[users]
env.category users
[sshd_log]
user root
group root
env.logfile /var/log/auth.log
env.category users
Для работы статистики php5-fpm редактируем его конфиг
sudo vim /etc/php5/fpm/main.conf
Добавляем
pm.status_path = /fpm-status
Перезагружаем клиент Munin:
sudo /etc/init.d/munin-node restart
или
sudo service munin-node restart
Перезагружаем php5-frm
sudo /etc/init.d/php5-fpm restart
Добавляем хост
sudo vim /etc/nginx/sites-available/munin.example.ru
Вставляем примерно следующее
server {
listen 80;
server_name munin.example.ru;
access_log /var/log/nginx/munin.example.ru.access.log;
auth_basic "Restricted";
auth_basic_user_file /etc/munin/.htpasswd;
location / {
root /var/cache/munin/www;
index index.html;
}
}
Включаем
sudo ln -s /etc/nginx/sites-available/munin.example.ru /etc/nginx/sites-enabled/munin.example.ru
Создаем файлик, где будут располагаться пользователи, для которых будет открыт доступ к графикам производительности (http://www.codeobsessed.com/encryption.php нужен пароль crypt(3)):
sudo vim /etc/munin/.htpasswd
Перезагружаем nginx
sudo /etc/init.d/nginx stop && sudo /etc/init.d/nginx start
Теперь можно смотреть графики по адресу munin.example.ru
Прикрепленный файл
Размер
www_raven.zip
7.75 кб
templates_raven.zip
28.68 кб
Источник: http://www.drupal.ru/node/60544
Оглавление
Содержать свой почтовый сервер, со всеми прибомбасами, такими как антивирусник, антиспам и так далее, оказалось слишком дорого в плане ресурсов, это будет плохо вписываться в имеющиеся 384М оперативки, даже при 512 я буду смотреть в сторону увеличения воркеров для fpm, увеличения памяти для скриптов (сейчас 1 воркер на 128М, что катострафически мало), также буду смотреть в сторону организации ускорителя и кеша… В общем только на конфигурации 1Gb оперативной памяти следует задуматься о развёртовании полноценного почтового сервера.
Я использую яндекс, т.к. в панели управления доменами у моего регистратора есть автоматическая привязка. Но можно пробовать завязывать на gmail или mail.ru
Меняем имя сервера (по умолчанию оно server), впринципе это нужно для полноценного почтового сервера, но пускай будет настроено правильно.
sudo vim /etc/hostname
Пишем название, например
sergei
Меняем хост
sudo vim /etc/hosts
Заменяем нули на реальный IP
0.0.0.0 sergei.example-d6.ru sergei
Перезагружаем ОС
sudo reboot
Смотрим на имя и хост
hostname
hostname -f
Если после перезагрузки имя не сменилось, то надо идти в панель управления VDS если нет доступа к ней, то просить хостера сменить имя.
Установим нужные пакеты, которые настроены будут позже
sudo apt-get install postfix libsasl2-2 sasl2-bin
Отредактируем конфиг:
sudo vim /etc/postfix/main.cf
Исправляем:
mynetworks = 127.0.0.0/8, 192.168.0.0/16
Добавляем в этот же конфиг
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/saslpass
smtp_sasl_security_options =
relay = smtp.yandex.ru
relayhost = smtp.yandex.ru
Добавим файл /etc/postfix/saslpass:
sudo vim /etc/postfix/saslpass
smtp.yandex.ru admin@example-d6.ru:password
Закрепим изменения:
sudo postmap /etc/postfix/saslpass
Подправим php.ini:
sudo vim /etc/php5/fpm/php.ini
Находим строку sendmail_path и заменяем:
sendmail_path = sendmail -t -i -f admin@example-d6.ru
Перезагружаем fpm
sudo /etc/init.d/php5-fpm restart
Теперь должно всё работать, я проверял на контактной форме случайного сайта, т.е. не c example-d6.ru, а например example-d7.ru, чтобы убедиться что письма отсылаются с любого домена, а не только указанного в конфиге.
Источник: http://www.drupal.ru/node/60543
Оглавление
Нужно настроить cron для всех сайтов, в том числе и для технических. Периоды выбираются индивидуально для каждого сайта, но на технический я ставлю 1 раз в сутки, не смотря на то что в админке drupal’a ставлю проверять обновления раз в неделю…
Открываем для редактирования задачи cron’a
sudo crontab -e
Должно быть примерно так, третья строка (www.example-d6.ru) запускается каждую минуту чтобы убедиться сразу что работает, после чего надо выставить нормальное время, чтобы не завалить сервер если сайтов в мультисайтинге десяток, а то и не один…
45 2 * * * /usr/bin/wget -O - -q -t 1 http://technical.example-d6.ru/cron.php
15 3 * * * /usr/bin/wget -O - -q -t 1 http://technical.example-d7.ru/cron.php
* * * * * /usr/bin/wget -O - -q -t 1 http://www.example-d6.ru/cron.php
35 3 * * /usr/bin/wget -O - -q -t 1 http://www.example-d7.ru/cron.php
Источник: http://www.drupal.ru/node/60542
Оглавление
Создаём папочки в sites
www.example-d6.ru
www.example-d6.ru/files
www.example-d6.ru/modules
www.example-d6.ru/themes
www.example-d6.ru/tmp
Копируем в www.example-d6.ru из sites/default файл default.settings.php и переименовываем в settings.php
Также копируем в www.example-d6.ru robots.txt
Если сайт переносится, редактируется settings.php чтобы данные о базе были верны.
Если ставиться, новый сайт и он первый на связке, то настройки добавляются при установке, потом редактируются.
Если ставиться, новый сайт, но он уже не первый, то копировать settings.php удобнее из соседнего сайта связки, и изменить следующее
$db_url = 'mysqli: //и ваши данные о базе
$db_prefix = array(
'default' => 'exampled6_',
'locales_meta' => 'shared_',
'locales_source' => 'shared_',
'locales_target' => 'shared_',
);
$base_url = 'http://www.example-d6.ru';
ini_set('memory_limit', '128M');
Теперь остаётся только задать адрес
sudo vim /etc/nginx/sites-available/example-d6.ru
Заменяем на свой хост
server {
listen 80;
server_name example-d6.ru;
rewrite ^ http://www.example-d6.ru$request_uri? permanent; #301 redirect
}
server {
listen 80;
server_name www.example-d6.ru;
access_log /var/log/nginx/example-d6.ru.access.log;
root /var/www/drupal6;
index index.php;
if (!-e $request_filename) {
rewrite ^/(.*)$ /index.php?q=$1 last;
}
error_page 404 index.php;
# hide protected files
location ~* .(engine|inc|info|install|make|module|profile|test|po|sh|.*sql|theme|tpl(.php)?|xtmpl|svn-base)$|^(code-style.pl|Entries.*|Repository|Root|Tag|Template|all-wcprops|entries|format)$ {
deny all;
}
# hide backup_migrate files
location ~* ^/sites/www.example-d6.ru/files/backup_migrate {
deny all;
}
# Static content
location = /robots.txt {
if (-f $document_root/sites/www.example-d6.ru/robots.txt) {
rewrite . /sites/www.example-d6.ru/robots.txt;
}
break;
}
location ~ ^(/sites/all|/sites/www.example-d6.ru)?/(modules|themes|libraries)/.*.(css|js|png|gif|jpg)$ { break; }
location /misc/ { break; }
location /sites/www.example-d6.ru/files/ { break; }
# Imagecache (http://drupal.org/project/imagecache)
location /sites/www.example-d6.ru/files/imagecache/ {
if (-f $request_filename) { break; }
rewrite ^(.*)$ /index.php?q=$1 last;
}
location ~ \.php$ {
# fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/drupal6$fastcgi_script_name;
include fastcgi_params;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
}
## Disable viewing .htaccess & .htpassword
location ~ /\.ht {
deny all;
}
}
Включаем
sudo ln -s /etc/nginx/sites-available/example-d6.ru /etc/nginx/sites-enabled/example-d6.ru
sudo /etc/init.d/nginx restart
Источник: http://www.drupal.ru/node/60541
Оглавление
Создаём пользователя drupal6
sudo /usr/sbin/adduser drupal6
Добавляем папки для ключей SSH
sudo mkdir /home/drupal6/.ssh
Генерируем ключи, сразу же предложит указать файл, он будет такой /home/drupal6/.ssh/id_rsa
sudo ssh-keygen -t rsa
sudo mv ~drupal6/.ssh/id_rsa.pub ~drupal6/.ssh/authorized_keys
sudo rm ~drupal6/.ssh/id_rsa
sudo chown -R drupal6:drupal6 ~drupal6/.ssh
sudo chmod 700 ~drupal6/.ssh
sudo chmod 600 ~drupal6/.ssh/authorized_keys
Надо разрешить им доступ по SSH для заливки файлов по SFTP протаколу
sudo vim /etc/ssh/sshd_config
Должно быть примерно так
AllowUsers admin drupal6
Перезагружаем SSH
sudo /etc/init.d/ssh reload
Теперь создаём папку для сайта
sudo mkdir /var/www/drupal6
sudo ln -s /var/www/drupal6 ~drupal6/www
sudo chown -R drupal6:drupal6 /var/www/drupal6
Логинимся от имени drupal6, например через FileZilla, и заливаем свежую версию ядра, создаём базу, пользователя базы и т.д через PhpMyAdmin
Теперь определяемся с адресами, у меня будет такая структура:
technical6.example-d6.ru – технический сайт который находится пожизненно в режиме “на обслуживании”. Здесь будут включены все модули которые есть в папочке all, следить за обновлениями модулей буду именно отсюда. Это позволит не включать вообще вообще ни на одном другом сайте в этой связке этот модуль, что несомненно ускорит админку этих сайтов. Будут ставиться переводы, таблицы для переводов будут шариться на все сайты связки. Так же на главную страницу будут выноситься ссылки на скрипт обновления каждого из сайтов мультисайтинга, что при установке обновлений ускорит работу.
www.example-d6.ru – первый сайт мультисайтинга, на шестёрке.
Источник: http://www.drupal.ru/node/60540
Оглавление
Ставим MySqlDumper (www.mysqldumper.net), его я использую для переноса баз данных, т.к. один сайт имеет запредельный размер, порядка 500М в несжатом виде, также ставлю на хостинг, там делаю экспорт, здесь импорт.
sudo mkdir /var/www/mysqldumper
sudo ln -s /var/www/mysqldumper ~admin/mysqldumper
sudo chown -R admin:admin /var/www/mysqldumper
Заливаем сюда скрипты, я например через FileZilla это делаю, а не через putty
Сразу поставим права, т.к. этого потребует скрипт установки.
chmod 777 /var/www/mysqldumper/config.php
Добавляем хост
sudo vim /etc/nginx/sites-available/mysqldumper.example.ru
Вставляем примерно следующее
server {
listen 80;
server_name msd.example.ru;
rewrite ^ http://mysqldumper.example.ru$request_uri? permanent; #301 redirect
}
server {
listen 80;
server_name mysqldumper.example.ru;
access_log /var/log/nginx/mysqldumper.example.ru.access.log;
location / {
root /var/www/mysqldumper;
index index.php;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/mysqldumper$fastcgi_script_name;
include fastcgi_params;
}
}
Включаем
sudo ln -s /etc/nginx/sites-available/mysqldumper.example.ru /etc/nginx/sites-enabled/mysqldumper.example.ru
И перезагружаем nginx
sudo /etc/init.d/nginx stop && sudo /etc/init.d/nginx start
Открыв в браузере mysqldumper.example.ru увидим install, проходим её. Нажимаем на “Create directory protection” например MD5. Для nginx нужен crypt(3) можно составить например здесь http://www.codeobsessed.com/encryption.php
Открываем файл с паролями и заменяем пароль на полученный через crypt(3)
vim /var/www/mysqldumper/.htpasswd
Но это не работает для nginx сервера, поэтому добавляем в конфиг
sudo vim /etc/nginx/sites-available/mysqldumper.example.ru
следующее
auth_basic "Restricted";
auth_basic_user_file /var/www/mysqldumper/.htpasswd;
т.е. получится примерно так
server {
listen 80;
server_name mysqldumper.example.ru;
access_log /var/log/nginx/mysqldumper.example.ru.access.log;
auth_basic "Restricted";
auth_basic_user_file /var/www/mysqldumper/.htpasswd;
...
И снова перезагружаем nginx
sudo /etc/init.d/nginx stop && sudo /etc/init.d/nginx start
Источник: http://www.drupal.ru/node/60538
Оглавление
Устанавливаем нужные пакеты
sudo apt-get install phpmyadmin php5-mcrypt
В окошке не выбираем ничего просто жмём enter
Добавляем хост
sudo vim /etc/nginx/sites-available/phpmyadmin.example.ru
Вставляем примерно следующее
server {
listen 80;
server_name pma.example.ru;
rewrite ^ http://phpmyadmin.example.ru$request_uri? permanent; #301 redirect
}
server {
listen 80;
server_name phpmyadmin.example.ru;
access_log /var/log/nginx/phpmyadmin.example.ru.access.log;
location / {
root /usr/share/phpmyadmin;
index index.php;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/phpmyadmin$fastcgi_script_name;
include fastcgi_params;
}
}
Включаем
sudo ln -s /etc/nginx/sites-available/phpmyadmin.example.ru /etc/nginx/sites-enabled/phpmyadmin.example.ru
Забегая вперёд, после входа PhpMyAdmin будет жаловаться на установленный Suhosin, правим конфиг как рекомендовано в доках на PhpMyAdmin
sudo vim /etc/php5/conf.d/suhosin.ini
Должны быть следующие значения:
suhosin.sql.bailout_on_error = off
suhosin.post.max_array_index_length = 256
suhosin.post.max_totalname_length = 8192
suhosin.post.max_vars = 2048
suhosin.request.max_array_index_length = 256
suhosin.request.max_totalname_length = 8192
suhosin.request.max_vars = 2048
так же логи не должны включать в себя sql
Далее отключаем предупреждение о возможных проблемах с suhosin
sudo vim /usr/share/phpmyadmin/libraries/config.default.php
В файле написано что мы не должны его менять, так что меняем только это значение, чтобы надпись не раздражала, так как мы выставили рекомендуемые параметры.
$cfg['SuhosinDisableWarning'] = true;
Перезагружаем php fpm и nginx
sudo /etc/init.d/php5-fpm restart && sudo /etc/init.d/nginx stop && sudo /etc/init.d/nginx start
Теперь по адресу phpmyadmin.example.ru должна быть форма входа в PhpMyAdmin
Источник: http://www.drupal.ru/node/60537
Оглавление
Устанавливаем нужные пакеты
sudo apt-get install mysql-server mysql-client php5-mysql
Правим конфиг чтобы уменьшить потребление памяти
sudo vim /etc/mysql/my.cnf
Находим раздел про InnoDB, и добавляем
skip-innodb
Перезапускаем mysql
sudo /etc/init.d/mysql restart
если не получится, то попробовать надо так
sudo service mysql restart
Потребление памяти уменьшилось, благодаря тому, что запущено теперь меньше процессов mysql
Перезапускаем php fpm т.к. мы поставили php5-mysql, который пока не работает
sudo /etc/init.d/php5-fpm restart
Источник: http://www.drupal.ru/node/60536
Оглавление
Устанавливаем сам memcache
sudo apt-get install php5-memcache
Перезагружаем php5-frm
sudo /etc/init.d/php5-fpm restart
Источник: http://www.drupal.ru/node/60535
Оглавление
Скачиваем во временную папку последнию версию и устанавливаем
cd /tmp/
sudo wget http://bart.eaccelerator.net/source/0.9.6.1/eaccelerator-0.9.6.1.tar.bz2
sudo tar xvjf eaccelerator-0.9.6.1.tar.bz2
cd eaccelerator-0.9.6.1
sudo phpize
sudo ./configure --enable-eaccelerator=shared
sudo make
sudo make install
cd ~
теперь редактируем и добавляем следующие строки, начиная после тега [PHP]:
sudo vim /etc/php5/fpm/php.ini
; eAccelerator configuration
; Note that eAccelerator may also be installed as a PHP extension or as a zend_extension
; If you are using a thread safe build of PHP you must use
; zend_extension_ts instead of zend_extension
;extension = "/usr/lib/php5/20090626/eaccelerator.so"
zend_extension = "/usr/lib/php5/20090626/eaccelerator.so"
eaccelerator.shm_size = "16"
eaccelerator.cache_dir = "/var/cache/eaccelerator"
eaccelerator.enable = "1"
eaccelerator.optimizer = "1"
eaccelerator.check_mtime = "1"
eaccelerator.debug = "0"
eaccelerator.filter = ""
eaccelerator.shm_max = "0"
eaccelerator.shm_ttl = "0"
eaccelerator.shm_prune_period = "0"
eaccelerator.shm_only = "0"
eaccelerator.compress = "1"
eaccelerator.compress_level = "9"
eaccelerator.allowed_admin_path = "/var/www/eaccelerator"
Создаём директории с нужными права
sudo mkdir -p /var/cache/eaccelerator
sudo chmod 0777 /var/cache/eaccelerator
Перезагружаем php5-frm
sudo /etc/init.d/php5-fpm restart
Источник: http://www.drupal.ru/node/60534
Оглавление
Нам понадобятся 2 библиотеки, закачаем последние версии и установим их
cd /tmp
wget http://us.archive.ubuntu.com/ubuntu/pool/main/k/krb5/libkrb53_1.6.dfsg.4~beta1-5ubuntu2_i386.deb
wget http://us.archive.ubuntu.com/ubuntu/pool/main/i/icu/libicu38_3.8-6ubuntu0.2_i386.deb
sudo dpkg -i *.deb
cd ~
Обновим список репозиториев, для установки последней стабильной версии PHP
sudo vim /etc/apt/sources.list
Добавляем
deb http://php53.dotdeb.org stable all
Обновляемся и устанавливаем PHP с нужными пакетами.
sudo apt-get update
sudo apt-get install php5-cli php5-common php5-suhosin
sudo apt-get install php5-fpm php5-cgi
sudo apt-get install php-apc php5-curl php5-dev
Редактируем конфиг для fpm, т.к. через него у нас будет запускаться FastCGI
sudo vim /etc/php5/fpm/php.ini
Вставляем следующий параметр
cgi.fix_pathinfo = 0
Правим конфиг для пакета php-apc
sudo vim /etc/php5/conf.d/apc.ini
Добавляем строку
apc.shm_size = 48
Чтобы не было падений php-fpm открываем этот конфиг
sudo vim /etc/php5/fpm/pool.d/www.conf
На самом деле динамические воркеры, это хорошо. Если мы даём каждому юзеру свой воркер это накладно при 2000 сайтов. Но у нас только VDS с 384М, а не сервак с 16 гигами, будет несколько юзеров, но с общими воркерами, для начала поставим 1, а когда будет всё настроено можно будет увеличивать если будут свободные ресурсы (На вторую конфигурацию с гигом памяти смело можно ставить 3, или вообще не трогать и оставить динамические). Так же хорошо для крона сделать отдельный воркер, это связано с тем что на моих сайтах долго выполняется cron, время каждого запуска расчитано, поэтому хватит и одного отдельного потока, для его бесперебойной работы, чтобы он не конкурировал с пользователями сайтов. Но всё это держим только в уме, а пока ставим 1 поток на всех.
pm = static
pm.max_children = 1
Перезагружаем nginx и php5-frm.
sudo /etc/init.d/nginx stop && sudo /etc/init.d/nginx start
sudo /etc/init.d/php5-fpm stop
sudo /etc/init.d/php5-fpm start
Создаём проверочный файл
sudo vim /var/www/index.php
И пишем такую строчку
<?php phpinfo(); ?>
Проверяем, должно всё работать.
Источник: http://www.drupal.ru/node/60533
Оглавление
Смотрим установлен ли апач
dpkg -l | grep apache
Если установлен, то удаляем примерно так (будет зависеть от установленных пакетов):
sudo apt-get --purge remove apache2 apache2.2-bin apache2.2-common apache2-mpm-prefork apache2-utils apache2-doc
Устанавливаем nginx
sudo apt-get install nginx
Запускаем
sudo /etc/init.d/nginx start
Далее в браузере вводим IP своего VDS и видим надпись
Welcome to nginx!
* Если появилась ошибка 403, то на этом этапе не страшно, в одной из версий неправильный конфиг дефолтовый, что исправиться при установке PHP
Меняем дефолтовый конфиг
sudo vim /etc/nginx/sites-available/default
Заменяем содержимое файла на следующее
server {
listen 80;
server_name localhost;
access_log /var/log/nginx/localhost.access.log;
## Default location
location / {
root /var/www;
index index.php;
}
## Images and static content is treated different
location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|xml)$ {
access_log off;
expires 30d;
root /var/www;
}
## Parse all .php file in the /var/www directory
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name;
include fastcgi_params;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_intercept_errors on;
fastcgi_ignore_client_abort off;
fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
}
## Disable viewing .htaccess & .htpassword
location ~ /\.ht {
deny all;
}
}
Чтобы можно было добавлять много server_name в разных конфигах нужно добавить директиву server_names_hash_bucket_size в конфиге nginx в http блок
sudo vim /etc/nginx/nginx.conf
server_names_hash_bucket_size 512;
Источник: http://www.drupal.ru/node/60532
Оглавление
Устанавливаем локаль
sudo /usr/sbin/locale-gen en_US.UTF-8 && sudo /usr/sbin/update-locale LANG=en_US.UTF-8
Обновляемся
sudo apt-get update
Ставим менеджер для обновлений
sudo apt-get install update-manager-core
sudo do-release-upgrade
Ставим для обзора процессов и их потребления памяти ими, ставим htop
sudo apt-get install htop
используем очень просто
htop
Ставим утилиты разработки
sudo apt-get install build-essential
Если стоит 10.04 а не 10.10 то обновление делается так
Открываем файл менеджера обновлений для правки
sudo vim /etc/update-manager/release-upgrades
Заменяем
Prompt=lts
на
Prompt=normal
Обновляемся
sudo do-release-upgrade
Теперь должна быть версия 10.10
Источник: http://www.drupal.ru/node/60531
Оглавление
Хостер установил уже Ubuntu Server 10.10 и даже поставил ssh и Apache 2.
Заходим через SSH как root, сразу меняем пароль на нормальный
passwd
Добавляем группу избранных, назовём её raccess
/usr/sbin/groupadd raccess
Открываем файл, для того чтобы нашу группу сделать “избранной”
/usr/sbin/visudo
Добавляем в конец файла, далее если не оговаривается, то всегда вставляется именно в конец.
## Allows people in group raccess to run all commands
%raccess ALL=(ALL) ALL
Добавляем нового пользователя, пускай будет admin, но в теории хорошо как и группу называть по другому, это усложняет взлом подбором.
/usr/sbin/adduser admin
Добавляем его к ранее созданной группе
/usr/sbin/usermod -a -G raccess admin
Добавляем папку для ключей SSH
mkdir ~/.ssh
Генерируем ключи
ssh-keygen -t rsa
Делаем для нашего будущего аккаунта, где вместо нулей подставляем реальный IP адрес
scp ~/.ssh/id_rsa.pub admin@0.0.0.0:
mkdir ~admin/.ssh
mv ~admin/id_rsa.pub ~admin/.ssh/authorized_keys
Назначаем права нашему пользователю
chown -R admin:admin ~admin/.ssh
chmod 700 ~admin/.ssh
chmod 600 ~admin/.ssh/authorized_keys
Настраиваем SSH
vim /etc/ssh/sshd_config
Проверяем значения и меняем или добавляем строки если нет…
Port 10022 # Меняем на что нибудь между 1025 и 65536, это так же усложнит жизнь взломщикам.
Protocol 2
PermitRootLogin no # отключаем запись для root пользователя
UseDNS no
AllowUsers admin # если пользователей несколько через пробел называем всех
В интернете предлагают сделать следующее, я пока не разобрался как потом залогиниться
PasswordAuthentication no
Создаём правила маршрутизации в файлике, чтобы после перезагрузки сервера настройки восстанавливались.
vim /etc/iptables.up.rules
Вставляем следующее, и меняем порт для SSH, который недавно ставили 10022, остальные не трогаем, в комментариях видно для чего они понадобятся.
*filter
# Allows all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
# Accepts all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allows all outbound traffic
# You can modify this to only allow certain traffic
-A OUTPUT -j ACCEPT
# Allows HTTP and HTTPS connections from anywhere (the normal ports for websites)
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
# Allows mysql
-A INPUT -p tcp --dport 3306 -j ACCEPT
# Allows fcgi
-A INPUT -p tcp --dport 9000 -j ACCEPT
-A INPUT -p tcp --dport 8521 -j ACCEPT
# Allows SSH connections
#
# THE -dport NUMBER IS THE SAME ONE YOU SET UP IN THE SSHD_CONFIG FILE
#
-A INPUT -p tcp -m state --state NEW --dport 10022 -j ACCEPT
# Allows mail
-A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 110 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 143 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 993 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 995 -j ACCEPT
# Allows ldap
-A INPUT -p tcp -m state --state NEW -m tcp --dport 389 -j ACCEPT
# Allows memcache
-A INPUT -p tcp -m state --state NEW -m tcp --dport 11211 -j ACCEPT
# Allows munin
-A INPUT -p tcp -m state --state NEW -m tcp --dport 4949 -j ACCEPT
# Allow ping
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
# log iptables denied calls
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
# Reject all other inbound - default deny unless explicitly allowed policy
-A INPUT -j REJECT
-A FORWARD -j REJECT
COMMIT
Чистим память
/sbin/iptables -F
Применяем наши правила
/sbin/iptables-restore < /etc/iptables.up.rules
Проверяем внимательно особенно наш порт SSH
/sbin/iptables -L
Для восстановления после перезагрузки создаём файл
vim /etc/network/if-pre-up.d/iptables
Вставляем следующее
#!/bin/sh
/sbin/iptables-restore < /etc/iptables.up.rules
Разрешаем запускать этот файл
chmod +x /etc/network/if-pre-up.d/iptables
Перезагружаем ssh
/etc/init.d/ssh reload
Закрываем Putty, открываем заново поменяв порт. Заходим под admin
Теперь нельзя залогиниться как root…
Источник: http://www.drupal.ru/node/60530
При выключенном кешировании аноним видит корзину как положено
При включенном кешировании и анониме с uid 0 корзина всегда показывается ссылкой
При включенном кешировании и анониме не 0 поведение корзины довольно непредсказуемо
Отключать кеш – не самая лучшая идея, не говоря уже о том, чтобы boost включить
вскрытие уберкарта показало, что uid 0 используется явно(кто бы сомневался) поэтому не 0 даёт такой результат
для начала запрещаем выдачу корзины анониму ссылкой
uc_cart.module
case 'view':
// 0 = Default shopping cart block.
if ($delta == 0) {
$cachable = 0;
потом ставим модуль ajaxblocks и выводим блок корзины через него
теперь можно смело включать кеширование или даже ставить boost
uc_ajax_cart работает так же отлично
единственный минус – +1 асинхронный запрос к серверу, что при включенном бусте нивелируется полностью
UPDATE 0
для не готовых идти по пути самурая есть путь ниндзи
поставить буст, не включать кеширование, поставить аякс блок
и вариант для джедаев – написать свой модуль/php-код, который выводит блок правильно, можно даже сразу с аякс
также можно попросить разработчиков уберкарт вычислять $cachable с учётом флага админки, но когда это будет?
если активно кешировать, я не вижу способов обойтись без аякс
UPDATE 1
с мест подсказывают, uid анонима должен быть 0 всегда, при любых обстоятельствах, иначе поведение модулей, его проверяющих, может стать непредсказуемым
но случается, что при выливке дампа его срывает – причины лично для меня непонятные, исправляю специально для этого сделанным sql
UPDATE 2
с мест подсказывают, uc_ajax_cart 2.x-beta версии делает всё самостоятельно
если вы не боитесь, то можно использовать его
Источник: http://www.drupal.ru/node/60318
Обновил модуль SMS для отправки уведомлений через телефоны или GSM модемы
Добавил отсылку уведомлений при новых коментариях в авторской ноде, уведомления о ответах на комментари и уведомления о всём что происходит на сайте
Ссылка на настройки sms/subscribe/comment но почему то ни как табой ни как меню не отображается если кто сможет помочь – буду рад.
Версия 0.1 http://www.drupal.ru/node/60065
Версия 0.2 http://www.drupal.ru/node/60119
Прикрепленный файл
Размер
sms-0.3.zip
12.82 кб
Источник: http://www.drupal.ru/node/60206
Итак обновил модуль SMS – отправка сообщений через мобильный телефон или GSM модем с помошью GAMMU
Добавил следующее:
* Журнал смс
* Отправка про cron
* Вкыл/Выкл транслит – Соответственно 140 или 63 символа ограничиваю строку
* Модуль подписки на новые ноды
Собираюсь добавить:
* Включение определённой роли при привязке номера
* Уведомление о новых ЛС
Прошлая версия: http://www.drupal.ru/node/60065
Если кто то поможет выложить на drupal.org буду благодарен…
Прикрепленный файл
Размер
sms-0.2.zip
11.83 кб
Источник: http://www.drupal.ru/node/60119
Возникло желание сделать трансляцию видео через IP-камеру.
Камера DSC-2121. Можно подключить напрямую к инету, в моем случае через домашний роутер DIR-320.
Далее пошли мучения с поиском и доработкой скрипта.
В результате получился такой код:
<DIV align=center>
<object id="xplugApplet" classid="java:xplug.class"
java_codebase="http://ХХХ.ХХХ.ХХХ.ХХХ"
type="application/x-java-applet"
archive="xplug.jar"
name="xplugApplet" height="480" width="640">
<param name="archive" value="xplug.jar">
<param name="code" value="xplug">
<param name="codebase" value="http://ХХХ.ХХХ.ХХХ.ХХХ/dcsclictrl.cab#version=1,0,0,2609">
<param name="scriptable" value="true">
<param name="name" value="cvcs">
<param name="type" value="application/x-java-applet;version=1.6">
<param name="menuheight" value="40"> <param name="RemotePort" value="80">
<param name="Timeout" value="10000"> <param name="mayscript" value="true">
<param name="xmode" value="preview"> <param name="productID" value="DCS-2121">
<param name="profileid" value="3"> <param name="bg" value="0xd5dfea">
<param name="inittrigger" value="0"> <param name="imageWidth" value="640">
<param name="imageHeight" value="480"> <param name="webEvent" value="0">
<param name="pageContext" value="Basic Z3Vlc3Q6">
<param name="microphone" value="0"> <param name="speaker" value="0">
<strong> Ваш браузер не имеет встроенной поддержки Java Plug-in. <br>
<a href="http://www.java.com/ru/download/manual.jsp">
Установите последнюю версию Java Plug-in отсюда.
</a>
</strong>
</object>
</DIV>
ХХХ.ХХХ.ХХХ.ХХХ – это IP Вашей камеры. Впрочем можно указывать и в “нормальном” виде – http://my_account.dlinkddns.com
На стороне клиента должна быть предустановлена Ява. Впрочем если ее не будет, появится сообщение с адресом закачки.
Проверял на ИЕ, Опере, Фоксе.
Пример реализации
(Не всегда работает. Для камеры нужен статический IP, а у меня псевдостатический, через www.dlinkddns.com)
В настройках камеры нужно создать пользователя guest с пустым паролем.
Источник: http://www.drupal.ru/node/60019
Нацарапал свой модуль для экспорта в ЯндексМаркет. Причиной послужили жалобы народа на модуль yml_export, который был включён в мою бесплатную сборку интернет магазина OpenStore
yml_export прост и в этом, наверное, его сила, но он генерирует XML “налету”, что приводит к тому, что при большой товарной базе Яндекс не успевает забрать весь файл.
Кроме того у народа были некоторые проблемы с нулевыми родительскими категориями, что с точки зрения Яндекса неправильно. Не знаю, может это уже и пофиксилось Ну и наконец, у yml_export бедноваты настройки
Модуль Price Export тоже несложен, но обладает приятными фичами
1) Генерация статического .xml файла
2) Поддерживаются все теги упрощённого формата экпорта
3) Возможность выбора источника для тегов – словари или CCK поля
4) Возможность выбора включать только товары, которые активны на складе или всех их. В последнем случае корректно отрабатывается тег available – для товаров под заказ available=”false”
5) Возможность выбора пресета для картинки товара
6) Настройка пути, по которому доступен файл. Также можно качать напрямую с файловой директории
7) Рудиментная статистика: время последнего успешного создания, потраченное время на генерацию файла, количество обработанных товаров
3 режима генерации: вручную пымпочкой, по крону, при обновлении ноды
Файл проходит общую валидацию XML, Яша также ест его.
Ограничения:
не для большой товарной базы! Используется последовательный node_load() при формировании источника экпорта, что довольно затратно по ресурсам.
Качаем же
Источник: http://www.drupal.ru/node/59824
Доброго времени суток. Хочу представить наши видео уроки по Drupal 6, которые точно будут полезны начинающим
Ничего военного в них нет, но снималось с “душой” и стремлением перетянуть людей с других CMSок, в первую очередь с Joomla.
Хотелось бы услышать мнение профессионалов по поводу того, что можно было еще снять и не плохо было бы добавить. (Views и Темизация сейчас оцифровываются).
Источник: http://www.drupal.ru/node/59507
Есть хороший модуль SexyBookmarks, который позволяет сделать на сайте красивые кнопки для добавления материалов в различные сервисы. Но нет в нем особо популярных российских сервисов ВКонтакте и Одноклассники.
Решил добавить эти два сервиса.
Для этого нужно сделать небольшое изменение в файле sexybookmark.inc – добавить в массив, возвращаемый функцией sexybookmarks_sexybookmarks() следующие элементы:
<?php'vkontakte' => array(
'title' => t('VKontakte'),
'description' => t('Share this on !title'),
'url' => 'http://vkontakte.ru/share.php?url={PERMALINK}',
),
'odnoklassniki' => array(
'title' => t('Odnoklassniki'),
'description' => t('Share this on !title'),
'url' => 'http://www.odnoklassniki.ru/dk?st.cmd=addShare&st.s=1&st._surl={PERMALINK}',
),?>
Плюс нужно скопировать два png файла (прилагаются) в папку images/icons
В результате в списке появятся иконки вышеупомянутых сервисов.
В действии можно увидеть здесь: http://www.happyho.ru/blog/2/11291
Если такой функционал кому-то интересен, а править модуль нет желания или умения, могу выложить модуль с изменениями.
Попробую написать на Drupal.org, может добавят эти кнопки в следующую версию модуля.
Прикрепленный файл
Размер
odnoklassniki.png
2.75 кб
vkontakte.png
1.93 кб
Источник: http://www.drupal.ru/node/59299
Мы организовываем новый супер-курс для друпаллеров, имеющих навыки PHP.
Первое занятие — 9 апреля.
Приглашаем к коммерческому сотрудничеству владельцов друпал-ресурсов. Подробности по тел.
Цель курса – дать базу знаний и практики начинающим программистам PHP для разработки модулей Drupal.
Обучение будет происходить в небольших группах, чтобы каждый смог получить качественные знания и ответы на свои вопросы.
Несколько вопросов, на которые нужно для себя ответить:
Знаешь основы PHP и стремишься к новому уровню знаний?
Хочешь научиться писать Drupal модули?
Надоело быть ограниченным возможностями существующих модулей?
Нужно решать нестандартные задачи?
Ели да, то звони и записывайся – 093-918-1234
В течение всего курса, в качестве упражнений, будет осуществляться разработка собственного модуля, функциональность которого будет расширяться в соответствии с проходимым разделом программы тренинга. Техническое задание на этот модуль достаточно сложное, будут освещены все основные хуки Drupal, API форм, модули Node, User др., что позволит углубиться в специфику написания модулей для Drupal и получить хорошие практические знания.
Также курс будет включать домашние задания для подкрепления пройденного материала.
В результате вы будете обладать достаточными навыками, чтобы писать собственные модули и развиваться дальше.
И еще несколько слов о курсе.
Занятия будут проходить 2 субботы. То есть интервал между занятиями 1 неделя.
Полный день: с утра и до вечера. Перерывы на кофе и обед.
Спикеры:
Евгений Курко
Виктор Богуцкий
Стоимость 980 грн.
Хочешь получить скидку? Звони за подробностями.
Есть возможность приема оплаты по безналу.
Реквизиты для оплаты:
Отримувач: Курко Євген Володимирович
Код: 3023914671
Банк: ПуАТ «СЕБ Банк», м. Київ, МФО 300175
Р/p: 2600207929
Призначення платежу: За консультування з питань інформатизації. Рахунок-фактура без номера. Без ПДВ.
______________________________________________________________
Если вы сотрудник фирмы, то ваш работодатель может заплатить.
______________________________________________________________
Программа работы
ТЗ на модуль по управлению и учету рассылок для магазина по продаже мобильных телефонов (Newsletters)
1. Письма рассылок
1.1 Предусмотреть интерфейс для создания рассылочного письма. Письмо должно отправляться в формате HTML без аттачментов
1.2 Интерфейс должен состоять из страницы внесения/редактирования письма рассылки. Страницы со списком всех внесенных писем. Функционал по отправке письма в рассылку. Функционал по поиску письма в списке писем на рассылку.
2. Подписчики на рассылку
2.1 Предусмотреть интерфейс управления подписчиками на рассылку. Подписчики – зарегистрированные пользователи друпал сайта.
2.2 Интерфейс должен состоять из страницы внесения/редактирования пользователя, обеспечивая подписку пользователя на рассылку администратором.
2.3 После того, как админ подписал пользователя на рассылку, пользователю должно прийти соответствующее уведомление из которого он может согласиться на подписку или нет (approved/denied).
2.4 Пользователь может отписаться от рассылки в любое время (статусы subscribed/unsubscribed) после чего ему должно прийти соответствующее уведомление об отписке.
2.5 Интерфейс должен состоять из страницы со списком всех пользователей, с информацией об согласии пользователя на рассылку (approved/denied) и статус пользователя (subscribed/unsubscribed). Реализовать функционал по поиску пользователя в списке.
Источник: http://www.drupal.ru/node/59230
В конце прошлого года (2010-го) для разработки одного сайта (вот он) потребовалось вставить туда календарь новостей. Требовалось что-то легкое, быстрое, что не будет грузить сайт сильно… Поискав по модулям и не найдя ничего путного, решил написать свой календарик с блекджеком и так далее…
В общем сделано было давно и уже позабылось, но приходит новое сообщение с drupal.ru с вопросом, как же реализован календарь на том сайте… Учитывая, что есть интерес к такому модулю, я сделал его его отдельным (раньше он был в связке с другими функциями сайта).
Собственно сейчас он отображает все типы материалов в календаре… Кому неудобно в файле модуля поменяйте $type на ваше условие для типа материала, например, $type = ’story’;. Лень было добавлять в настройку блока такое поле.
О, вспомнил. Модуль включается как блок и в нем ещё формируется страница типа /calendar/ГГГГ/ММ/ДД для отображения страницы с материалами за выбранный день
Темизация осуществляется через правку css-файла и спрайта со стрелками. Скрипт править не надо
Вот и всё, собственно… Юзайте на здоровье
Чуть не забыл! Файлик вот… Шестая версия друпала
UPDATE (01.04.2011)
Обновил модуль по просьбе taru
Добавил выборку по типу материала и по полю CCK Date, для выбора материалов типа афиш
Добавил сохранение последнего месяца, чтобы не листать лишний раз.
Файл вот
За спасибо, приму копеечки на яндекс.деньги 41001896059641 или заказ на разработку новых модулей )))
Прикрепленный файл
Размер
russian_calendar.zip
7.78 кб
russian_calendar_v02.zip
9.25 кб
Источник: http://www.drupal.ru/node/59020
Очень часто бывает нужно сделать сортировку нод по какому-то критерию. Для этого часто используются Views, Nodequeue, Flag и другие похожие модули. Но часто бывает так, что функционала этих модулей недостаточно для удовлетворения хитрых требований заказчика. Конечно можно сделать много nodequeue и рассказать заказчику, которая из них за что отвечает, но такая система с точки зрения юзабилити выглядит как минимум сомнительно. Другим вариантом решения может быть добавление cck-поля “weight” и вручную для каждой ноды выставлять ее вес и уже по нему сортировать. Но опять же при наличии тысяч нод данный способ не является решением проблемы.
Читать полностью…
Источник: http://www.drupal.ru/node/58883
Smush.it использует методы оптимизации изображения специфические для каждого формата, чтобы удалить ненужные байты из файлов изображений, а это значит что мы получаем оптимизацию изображений, не меняя их внешний вид или качество.
В интерфейсе нам доступны флешовый мультизагрузчик или загрузка по URL
После того как Smush.it обработает изображения, на экране появится отчет
Все оптимизированые изображения потом можно сохранить в ZIP файле.Как видно из отчета, оптимизация для нашего примера составила 15.84%, что является потрясающим результатом, поскольку все изображения перед этим уже были оптимизированы другой программой.
Источник
Источник: http://www.drupal.ru/node/58560
Сегодня, точнее вчера, состоялся очередной Drupal Day в Краснодаре, основная тема – восьмое марта и заказчик из Омска.
Были два человека – я и Богдан. Женщин в нашем коллективе нет, поэтому праздник никто не испортил.
В программе мероприятиея были пиво и закуска, обсуждение важных вопросов таких как завышенные требования работодателей, XSS-уязвимости и то как порутать любой сервер.
Источник: http://www.drupal.ru/node/58552
XHprof – это иерархический профайлер для PHP c HTML интерфейсом. Ядро написано на языке С (на уровне отчетов и интерфейса код уже весь на PHP), а для скачки доступно в виде экстеншина для PHP. Этот профайлер умеет собирать данные о использовании памяти, ресурсов процессора, количестве и последовательности вызовов функций, а так же inclusive time (время, потраченное на функцию и на все функции, вызванные из нее) и exclusive time(время, потраченное на функцию без учета времени на вложенные функции).
Дополнительно, XHprof поддерживает сравнение двух запусков (иерархический DIFF отчет) и умеет объединять несколько запусков для усреднения данных.
Читать полностью…
Источник: http://www.drupal.ru/node/58543
Заготовка в формате *.psd для создания дизайна под Drupal на базе 12-колоночной разметки по стандарту 960 Grid System. Надеюсь она окажется вам полезной. Файл к сожалению прикрепить не удалось, скачать его можно здесь
Источник: http://www.drupal.ru/node/58347
http://dl.dropbox.com/u/6717893/less.zip
Набросал модуль для автоматического подключения замечательного одноимённого препроцессора.
Поскольку в написании модулей и наглийском наречии слаб, прошу помощи в оформлении страницы помощи для него и readme.
Исправление идеологических ошибок тоже приветствуется.
Источник: http://www.drupal.ru/node/58323
Перед тем как переходить на 7-ую версию друпала, ответьте на вопросы (самому себе):
Зачем вам это нужно? (если всё хорошо работает)
Настолько важен вам переход или стоит подождать? (к чему спешка..)
Возможно лучше пока остаться на 6-ой версии друпала? (Меньше проблем, всё более стабильно работает)
Обычно большинство разработчиков переходят на следующую версию через 6-12 месяцев (статистика приблизительная, по моим личным наблюдениям..). Например с 4-ой на 5-ую версию, составило примерно, от трёх до девяти месяцев, хотя кто-то, только через пару лет обновился
На данный момент, для 7-ой версии друпала имеется чуть более 1000 модулей. С одной стороны это много, с другой, ещё огромное количество модулей не адаптировано под 7-ую версию, а некоторые и не будут переделаны… (по разным причинам).
Перед тем как переходить на 7-ую версию, проверьте, чтобы были все нужные вам модули сделаны для 7-ой версии.
Скачайте все нужные вам модули и установите их локально вместе с 7-ой версией друпала! Проверьте на чистой установке, нормально они работают вместе или есть проблемы. Если есть возможность, сделайте чистую установку на своём хостинге (например, на поддомене), чтобы быть уверенным, что 7-ая версия друпала работает нормально на вашем хостинге и корректно работают модули.
Если есть проблемы, ищите решение (возможно надо поставить патч, для какого-нибудь модуля) или подождите с переходом.
Возможно это займёт час-два времени, но вы будете точно знать, что эти модули вместе работают на семёрке.
Список модулей перенесённых в ядро друпал 7.x – http://drupal.org/node/895314
Кстати, можно отследить по функциональности модулей, что нового в 7-ой версии…
Если вы используте свои модули, то здесь – http://drupal.org/update/modules (eng) можете прочитать как их обновить.
Так же можете прочитать, как обновить свой дизайн сайта – http://drupal.org/update/theme (eng)
Перед переходом на 7.x версию друпала, обновите до последней версии Друпала 6.x ваш сайт. Если вы используете версию 5.x, то обновите её сначала до 6-ой версии!
Обновление.
1) Создайте резервную копию базы данных и всех папок и файлов. Сохраните в таком месте, чтобы не удалить случайно Резервную копию базы данных делайте сторонней программой, а не модулем работающим в друпале! Используйте, например – http://sypex.net/ru/
2) Войдите на сайт под пользователем ID 1 (это первый пользователь который был создан, при создании сайта).
3) Перейдите в раздел – admin/settings/site-maintenance и переведите сайт в режим технического обслуживания.
4) Перейдите в раздел – admin/build/themes и включите по умолчанию дизайн сайта – Garland.
5) Перейдите в раздел – admin/build/modules и отключите все модули которые не входят в ядро друпала (обязательные и дополнительные).
Если есть модули, которые вы не будете использовать в 7-ой версии друпала, то можете их удалить на странице – admin/build/modules/uninstall (тем самым очистив базу данных от лишних таблиц). Чем больше удалите, тем лучше )
6) Удалите все файлы и папки, за исключением папки ’sites’ и входящих в неё файлов и папок. Другие файлы, которые вы создали в других местах, тоже сохраните на месте.
Если вы делали изменения в файлах .htaccess или robots.txt, то вам придётся повтороно внести изменения уже в новых файлах.
7) Если вы удалили какие-либо модули из базы данных на странице – admin/build/modules/uninstall то можете удалить файлы этих модулей из папки – sites/all/modules или в зависимости от того, где они у вас находятся…
Остальные модули оставьте на месте, даже если они несовместимы с Drupal 7.x.
Загрузите текущую версию друпал 7.x на ваш сервер.
9) Сделайте если нужно изменения в файлах .htaccess и robots.txt
10) Удалите файл – default.settings.php он находится в папке – sites/default/default.settings.php
11) Сделайте файл settings.php доступным для записи, чтобы в процессе обновления можно было внести изменения, под версию 7.x
Если для режима технического обслуживания вы прописывали строку – $conf['maintenance_theme'] = ‘ваш_дизайн’; – то удалите строку.
12) Запустите update.php он находится по адресу http://вашсайт.ru/update.php
Если вы не можете получить доступ к update.php, то выполните следующие действия:
– Откройте в текстовом редакторе файл settings.php
– Найдите строку – $update_free_access = FALSE;
– Замените её на – $update_free_access = TRUE;
– После того как обновление будет сделано, замените обратно TRUE на FALSE
13) Сделайте резервную копию вашей базы данных, после окончания процесса обновления.
14) Замените и обновите модули, которые не входят в ядро друпала (с запуском update.php до включения модулей и после включения).
15) Убедитесь, что в строке $update_free_access файла settings.php прописано FALSE. Можете прописать строку – $conf['maintenance_theme'] = ‘ваш_дизайн’; с вашим дизайном, для режима технического обслуживания.
16) Зайдите на страницу – admin/reports/status и убедитесь, что нет ошибок.
17) Включите по умолчанию свой дизайн сайта. (конвертированный под 7.x).
18) Сделайте резервную копию базы данных.
19) Зайдите на страницу – admin/config/development/maintenance и включите сайт в рабочий режим.
20) Проверьте настройки, правильный вывод блоков и тому подобное…
Если вы столкнулись с ошибками или проблемами во время обновления, то:
– Обратите внимание на любые сообщения об ошибках.
– Восстановите сайт в предыдущее состояние с помощью резервной копии базы данных, созданной до начала процесса обновления сайта. Не пытайтесь делать дальнейшее обновление сайта, если возникли проблемы при обновлении!
Более подробную информацию по обновлению сайта, можно найти на странице – http://drupal.org/upgrade (eng)
Если в вас живёт дух экспериментатора и новатора, если вы отличный специалист и любите исправлять ошибки, если ваш темперамент и характер не даёт вам спокойно спать или просто “не дала” жена, то можете смело обновляться до 7-ой версии друпала
В остальных случаях, подождите до лета…
P.S. Если будете обновляться, отпишитесь, как получилось..
Attached poll “Вы будете обновляться до 7-ой версии?”.
Register or login to poll
Results:
Хочу обновляться, но нет нужных модулей: 4 голоса
Хочу обновляться, но боюсь косяков: 3 голоса
Не хочу обновляться, геморроя с этим много: 3 голоса
Уже обновился: 2 голоса
А нафига вообще это нужно?: 2 голоса
Буду обновляться ближе к лету: 2 голоса
Буду обновляться примерно в конце года: 1 голос
Буду обновляться в ближайшее время: 4 голоса
Источник: http://www.drupal.ru/node/58265
Что такое CDN?
Кому и почему нужно использовать CDN?
Инфраструктура CDN & Drupal
Пример расширенной настройки CDN в друпале
Распараллеливания загрузки
читать
Источник: http://www.drupal.ru/node/58264
Скрипт cron.php используется в Друпале для для работы поиска(индексация контента), отправки писем подписчикам, сбора rss-фидов и т.д. – модули сами могут давать задания для выполнения по расписанию.
На drupal.org присутствует немалое количество модулей, которые позволяют тем или иным образом взаимодействовать со скриптом крона. Наиболее популярными среди них являются: SuperCron и Poormanscron. Первый имеет неплохой набор настроек для автоматизации и планирования крон-задач и является очень перспективным, а второй из всех настроек может похвастаться только интервалом запуска скрипта cron.php. На мой взгяд наиболее правильным и удобным является модуль Elysia cron – этот модуль, благодаря своей исключительной гибкости и юзабельности серьезно уделывает конкурентов.
Полная статья »
Источник: http://www.drupal.ru/node/58184
Во первых, что такое Apache Solr?
Apache Solr – это расширяемая поисковая платформа с открытым исходным кодом для от проекта Apache Lucene.
Почему Apache Solr?
Основными критериями выбора этой платформы для нас стало то, что Apache Solr оптимизирован для работы с большой нагрузкой и что репликация уже в составе ядра платформы, а это дает большие возможности для масштабирования.
На одном с проектов мы столкнулись с вопросом «А что будет если наш основной Solr сервер вдруг перестанет отвечать? Вся система поиска на сайте умирает?».
Полная статья »
Источник: http://www.drupal.ru/node/57760
Дамы и господа, леди и джентльмены! Товарищи!
От лица ресурса drupal-bloggers.com предлагаю провести опрос на самый интересный блог о Друпал 2010. Проголосуйте за блог, который вам запомнился в 2010 году, блог, который вы с интересом продолжаете читать и в 2011 году.
К голосованию предлагаю самые активные и полезные блоги по агрегатору Drupal-bloggers.com:
EllECTRONC – http://drupalblog.ru/
Drupalka – http://www.drupalka.ru/
XandeadX – http://xandeadx.ru/
Graker – http://graker.ru/
Drupal Developer – http://drupaldeveloper.ru/blog
Sidashin.ru – http://sidashin.ru/
ShvetsGroup – http://shvetsgroup.com/ru/blog
Drupalace – http://drupalace.ru/
Shift-Web – http://www.shift-web.ru/
Sherskova.Ru – http://sherskova.ru/
Мой блог – http://dovbysh.com/ru/blogs/kodo понятно вне конкурса.
Думаю будет логично иметь возможность проголосовать за несколько блогов одному пользователю.
Предлагаю обратить внимание не только на количество материалов в блоге, но так же на их полезность и форму подачи материалов (дизайн блога и оформление статей).
К сожалению действительно полезных и активных блогов о Друпал не много. Ряд интересных блогов перестали обновляться в течении 2010 года. Но в целом активность и уровень распространения материалов о Друпал через блоги и личные сайты только растет, что не может не радовать.
Загадывать наперед достаточно сложно, но есть желание конкурс «Друпал-блоггер года» сделать постоянным.
Чтобы конкурс был интереснее как блоггерам , так и друпаллерам победителю конкурса предлагается небольшой приз – японский чай фукамущи сенча «Пожелание богатства»
Чай предоставлен Магазином японского чая. Пересылка чая победителю естественно осуществляется за счет магазина авиапочтой.
Опрос проводится до 1 марта (неделю). Не проходи мимо! Поделись своим мнением!
Победит интереснейший!
Attached poll “Какой на ваш взгляд наиболее интересный блог о Друпал в 2010 году?”.
Register or login to poll
Results:
EllECTRONC: 12 голосов
Drupalka: 3 голоса
XandeadX: 53 голоса
Graker: 30 голосов
Drupal Developer: 4 голоса
Sidashin.ru: 3 голоса
ShvetsGroup: 29 голосов
Drupalace: 32 голоса
Shift-Web: 11 голосов
Sherskova.Ru: 2 голоса
Источник: http://www.drupal.ru/node/57737
Не так давно мной был написан один занятный модуль для быстрой конвертации валют между собой. Представляет из себя блок со списком валют и полем для ввода данных.
Модуль тянет по крону данные о валютах из банков на выбор – ЦБР или НБРБ (Российский и Белорусские центральные банки). Валюты можно включать или отключать, менять их местами. В качестве основной валюты можно использовать любую из представленных валют. В модуль встроены стили, который можно при необходимости отключить.
Модуль имеет довольно удобную и пользовательски-простую страницу с настройками. Устанавливается модуль просто – достаточно закинуть его в папку с модулями /sites/all/modules, потом перейти на сайте в раздел настройки модулей /admin/build/modules и включить. После данной операции в разделе с блоками /admin/build/block появится блок “Валютный конвертер”. Достаточно перетащить его в любой регион и (обязательно) запустить крон (для того, чтобы модуль получил данные из банков). После этого блок будет работать.
Настроить блок можно на странице /admin/settings/currency_converter. Здесь пояснения, я думаю, будут лишними. Не разобраться там невозможно
Модуль находится под активной разработкой, поэтому любые замечания и предложения только приветствуются.
Собственно, сабж: currency_converter
Источник: http://drupal.ru/node/57336
Не так давно мной был написан один занятный модуль для быстрой конвертации валют между собой. Представляет из себя блок со списком валют и полем для ввода данных.
Модуль тянет по крону данные о валютах из банков на выбор – ЦБР или НБРБ (Российский и Белорусские центральные банки). Валюты можно включать или отключать, менять их местами. В качестве основной валюты можно использовать любую из представленных валют. В модуль встроены стили, который можно при необходимости отключить.
Модуль имеет довольно удобную и пользовательски-простую страницу с настройками. Устанавливается модуль просто – достаточно закинуть его в папку с модулями /sites/all/modules, потом перейти на сайте в раздел настройки модулей /admin/build/modules и включить. После данной операции в разделе с блоками /admin/build/block появится блок “Валютный конвертер”. Достаточно перетащить его в любой регион и (обязательно) запустить крон (для того, чтобы модуль получил данные из банков). После этого блок будет работать.
Настроить блок можно на странице /admin/settings/currency_converter. Здесь пояснения, я думаю, будут лишними. Не разобраться там невозможно
Модуль находится под активной разработкой, поэтому любые замечания и предложения только приветствуются.
Собственно, сабж: currency_converter
Модуль разработан при поддержке Интернет-Маркетинга
Источник: http://www.drupal.ru/node/57336
Модуль обмена данными с 1С (использует формат данных CommerceML 2)
Настройки
Для облегчения интерфейса и для стабильности хода выполнения операций, импорт продуктов из 1С разделен на 3 этапа.
Операция удаления продуктов
Операция импорта продуктов из 1С
Операция импорта ценовых предложений из 1С
Импорт
# Удаление ранее импортированных товаров (batch process)
# Импорт в полуавтоматическом режиме категорий из 1С (batch process)
# Импорт в полуавтоматическом режиме позиций товара, с привязкой к категориям (batch process)
# Импорт ценовых предложений из 1с
# Автоматический импорт (возможен только с модулем 1С www.cmlservice.com)
Экспорт
# Экспорт заказов из 1С
# Экспорт контрагентов из 1С
# Автоматический экспорт (возможен только с модулем 1С www.cmlservice.com)
скачать
Источник
Источник: http://drupal.ru/node/56968
Модуль обмена данными с 1С (использует формат данных CommerceML 2)
Настройки
http://drupal.org/project/cmlservice (теперь и на .org)
https://bitbucket.org/mirocow/cmlservice (и на bitbucket.org)
Для облегчения интерфейса и для стабильности хода выполнения операций, импорт продуктов из 1С разделен на 3 этапа.
Операция удаления продуктов
Операция импорта продуктов из 1С
Операция импорта ценовых предложений из 1С
Импорт
# Удаление ранее импортированных товаров (batch process)
# Импорт в полуавтоматическом режиме категорий из 1С (batch process)
# Импорт в полуавтоматическом режиме позиций товара, с привязкой к категориям (batch process)
# Импорт ценовых предложений из 1с
# Автоматический импорт (возможен только с модулем 1С www.cmlservice.com)
Экспорт
# Экспорт заказов из 1С
# Экспорт контрагентов из 1С
# Автоматический экспорт (возможен только с модулем 1С www.cmlservice.com)
скачать
Источник
Источник: http://www.drupal.ru/node/56968
***OpenStore – это сборка готового интернет-магазина на основе Ubercart и Drupal***
Предистория
Сайт проекта
Скачать сборку
Тут мы ловим блох
В этой теме я буду информировать народ о последних новостях проекта.
Добрые вести на 6.02.2011
Вышла Openstore Beta 2. Версия представляет собой перебродивший прежний dev + 2 новых модуля:
Yml export производства товарища restyler. Честно говоря, я не сильно в восторге от этого модуля, он сильно прост (хотя возможно это плюс) да и принцип действия не особо нравится, к тому же, пришлось немножко подправить, но, тем не менее, респект и уважение автору.
Долгожданный модуль интеграции 1С с Уберкарт производства товарища Mirocow, а точнее его demo. Доступна полнофункциональная версия, но за деньги. Купить можно (и нужно) через меня. Покупая что-то через меня, вы поддерживате проект и энтузиазм мой, его творящий.
Качаем, торопливо отстранив только что откупоренный пивас
Важные объявления:
Разобрался в настройках Openstore сам и хочешь помочь другим? Нужны добровольцы для написания руководства пользователя интернет магазина на основе Уберкарт!
Сделал таки магазин с использованием сборки OpenStore?
Отправь своё детище на мыло openstore.org.ua@gmail.com c указанием своего логина на сайте проекта www.openstore.org.ua. Я размещу на этот магазин прямую ссылку с сайта проекта!
Источник: http://drupal.ru/node/56952
***OpenStore – это сборка готового интернет-магазина на основе Ubercart и Drupal***
Предистория
Сайт проекта
Скачать сборку
Багтреккер
Обновление от 27.03.2011
ВНИМАНИЕ
Проект заморожен в связи с переездом автора в США. В ближайшие как минимум 6 мес (начиная с апреля 2011) я вряд ли смогу хоть как-то заниматься этим проектом. Это значит, что как минимум на этот срок:
Не будут выходить никакие обновления
Не будут рассматриваться задачи в багтреккере, сам багтреккер будет закрыт во избежании спама.
Загрузки всё также будут доступны
Спасибо за понимание!
Источник: http://www.drupal.ru/node/56952
Привет!
Мы проводим тренинг для начинающих веб-мастеров.
Очень доступно рассказываем, показываем и сразу практикуем, как сделать свой сайт на Drupal.
Часть людей, начинающих работать с Друпалом, сталкиваются в первое время (недели-месяцы) с рядом тривиальных задач, решение которых не очевидно по разным причинам, поэтому приглашаем пройти наш курс и открыть мозг для новых знаний:)
Кратко.
Цель тренинга — научить эффективно использовать возможности Drupal.
Архитектура меню, блоков, таксономия.
Изучаем основные модули Views, CCK, ImageCache и др.
Первый опыт в проведении тренинга по созданию сайтов для новичков оказался весьма успешным. Мы запланировали проведение курсов для вечерней группы и группы выходного дня.
Группа выходного дня — 18-20 февраля
Вечерняя группа — 9-12 февраля
Стоимость обучающих курсов 1 000 грн. Вне зависимости от выбранного формата: учиться в выходные (суббота, воскресенье и вечер пятницы) либо вечером в будни (среда, четверг и пятница вечером, и полдня субботы).
Каждому участнику предоставляется персональный доступ для сайта FTP и БД (база данных).
После прохождения курса участникам предоставляется консультативная поддержка.
По всем вопросам можно обращаться по телефону 093 330 28 30 (Даша),
либо отправляйте свои контактные данные на daredjana@gmail.com.
Источник: http://drupal.ru/node/56898
Привет!
Мы проводим тренинг для начинающих веб-мастеров.
Очень доступно рассказываем, показываем и сразу практикуем, как сделать свой сайт на Drupal.
Часть людей, начинающих работать с Друпалом, сталкиваются в первое время (недели-месяцы) с рядом тривиальных задач, решение которых не очевидно по разным причинам, поэтому приглашаем пройти наш курс и открыть мозг для новых знаний:)
Кратко.
Цель тренинга — научить эффективно использовать возможности Drupal.
Архитектура меню, блоков, таксономия.
Изучаем основные модули Views, CCK, ImageCache и др.
Первый опыт в проведении тренинга по созданию сайтов для новичков оказался весьма успешным. Мы запланировали проведение курсов для вечерней группы и группы выходного дня.
Группа выходного дня — 18-20 февраля
Вечерняя группа — 9-12 февраля
Стоимость обучающих курсов 1 000 грн. Вне зависимости от выбранного формата: учиться в выходные (суббота, воскресенье и вечер пятницы) либо вечером в будни (среда, четверг и пятница вечером, и полдня субботы).
Каждому участнику предоставляется персональный доступ для сайта FTP и БД (база данных).
После прохождения курса участникам предоставляется консультативная поддержка.
По всем вопросам можно обращаться по телефону 093 330 28 30 (Даша),
либо отправляйте свои контактные данные на daredjana@gmail.com.
Источник: http://www.drupal.ru/node/56898
Прошу поддержать плюсиками:
OpenStore — бесплатная сборка интернет — магазина на основе Drupal и Ubercart
Источник: http://drupal.ru/node/56703
Прошу поддержать плюсиками:
OpenStore — бесплатная сборка интернет — магазина на основе Drupal и Ubercart
Источник: http://www.drupal.ru/node/56703
Привет, сообщество!
К выпуску готовится номер журнала «Друпалогия», в связи с этим, предложение авторам статей или переводов, связанных с Друпал: вы можете отправить свои материалы нам и ваша статья будет размещена. Вам почёт уважение от читателей, нам ещё больше оптимизма и альтруизма для хороших дел.
Ни у кого не возникло желание написать хорошую статью для журнала?
Темы статей могут быть любыми, но связанными с Drupal 6, 7, информационными технологиями, программированием, системным окружением.
Требования простые:
Объём статьи не менее двух печатных листов формата А4 (Arial, Garuda, 11pt);
Обязательно проверяйте орфографию, пунктуацию и вообще грамотность текста. ;
Код должен быть подсвечен, из кода должны быть убраны все ссылки на описание тегов, функций. Не касается ссылок по теме статьи;
В коде не должен присутствовать русский язык, за исключением комментариев к коду;
Перед кодом должна быть указана используемая версия PHP;
Не надо вставлять кучу ссылок на Drupal.org на одну страницу;
Анонс статьи должен присутствовать;
Изображения, схемы, снэпшоты поощряются. Изображения не должны быть масштабированы;
Если в вашей статье должны быть ссылки, не стесняйтесь их вставлять (редиректы запрещены!);
Запрещена публикация статей без ведома их авторов. Не касается переводов, но ссылка на оригинальную статью должна присутствовать!
Структура документа:
Автор: (Фамилия (Ник) Имя);
Оригинальная статья: (если это перевод);
Версия Drupal;
Анонс;
Статья.
Количество статей не ограничено. Можно определиться по тематике:
Про Drupal;
Drupal 7
Обзоры модулей;
Локализация
Обучение (советы, уроки);
Не Drupal (публикации на темы, не касающиеся Drupal, но имеющие отношение к IT, Web, кодингу и т.п.);
В настоящее время присланы статьи:
Ubercart Payment API
Views API
Drupal, SVN, Drush
Темизация шаблонов
Пакет Zabbix
Заметки по правильной настройке Drupal
Огромная благодарность вам!
Многие готовили доклады на прошлогодний «ДрупалКэмп», который к всеобщему сожалению не состоялся, поэтому предлагаю опубликовать ваши доклады в виде статей в журнале «Друпалогия», который в настоящее время испытывает реальные проблемы с материалами.
Для тех, кто не в танке: Пилотный выпуск (скачать)
————————————————————————————————————————————————————
Любые вопросы можно задать здесь или написать письмо на drupalogy.magazine@gmail.com
P.S. Проект «Друпалогия» участвует в рейтинге рунета, поддержите его: http://www.ratingruneta.ru/awards_vote/?site_id=68110
Источник: http://drupal.ru/node/56612
Привет, сообщество!
К выпуску готовится номер журнала «Друпалогия», в связи с этим, предложение авторам статей или переводов, связанных с Друпал: вы можете отправить свои материалы нам и ваша статья будет размещена. Вам почёт уважение от читателей, нам ещё больше оптимизма и альтруизма для хороших дел.
Ни у кого не возникло желание написать хорошую статью для журнала?
Темы статей могут быть любыми, но связанными с Drupal 6, 7, информационными технологиями, программированием, системным окружением.
Требования простые:
Объём статьи не менее двух печатных листов формата А4 (Arial, Garuda, 11pt);
Обязательно проверяйте орфографию, пунктуацию и вообще грамотность текста. ;
Код должен быть подсвечен, из кода должны быть убраны все ссылки на описание тегов, функций. Не касается ссылок по теме статьи;
В коде не должен присутствовать русский язык, за исключением комментариев к коду;
Перед кодом должна быть указана используемая версия PHP;
Не надо вставлять кучу ссылок на Drupal.org на одну страницу;
Анонс статьи должен присутствовать;
Изображения, схемы, снэпшоты поощряются. Изображения не должны быть масштабированы;
Если в вашей статье должны быть ссылки, не стесняйтесь их вставлять (редиректы запрещены!);
Запрещена публикация статей без ведома их авторов. Не касается переводов, но ссылка на оригинальную статью должна присутствовать!
Структура документа:
Автор: (Фамилия (Ник) Имя);
Оригинальная статья: (если это перевод);
Версия Drupal;
Анонс;
Статья.
Количество статей не ограничено. Можно определиться по тематике:
Про Drupal;
Drupal 7
Обзоры модулей;
Локализация
Обучение (советы, уроки);
Не Drupal (публикации на темы, не касающиеся Drupal, но имеющие отношение к IT, Web, кодингу и т.п.);
В настоящее время присланы статьи:
Ubercart Payment API
Views API
Drupal, SVN, Drush
Темизация шаблонов
Пакет Zabbix
Заметки по правильной настройке Drupal
Огромная благодарность вам!
Многие готовили доклады на прошлогодний «ДрупалКэмп», который к всеобщему сожалению не состоялся, поэтому предлагаю опубликовать ваши доклады в виде статей в журнале «Друпалогия», который в настоящее время испытывает реальные проблемы с материалами.
Для тех, кто не в танке: Пилотный выпуск (скачать)
————————————————————————————————————————————————————
Любые вопросы можно задать здесь или написать письмо на drupalogy.magazine@gmail.com
P.S. Проект «Друпалогия» участвует в рейтинге рунета, поддержите его: http://www.ratingruneta.ru/awards_vote/?site_id=68110
Источник: http://www.drupal.ru/node/56612
Есть замечательный модуль OpenADS. Нужен для интеграции банерообменной системы OpenX c Drupal.
Подготовил версию для 7.x. В основу взял 6.x-1.0.
Тестировалась с OpenX 2.8.7, возможны глюки с другими версиями.
Скачать можно здесь
Источник: http://drupal.ru/node/56235
Есть замечательный модуль OpenADS. Нужен для интеграции банерообменной системы OpenX c Drupal.
Подготовил версию для 7.x. В основу взял 6.x-1.0.
Тестировалась с OpenX 2.8.7, возможны глюки с другими версиями.
Скачать можно здесь
Источник: http://www.drupal.ru/node/56235
Здравствуйте!
С недавнего времени начал понемногу пользоваться твиттером. Там есть такое интересное понятие – хэш-тег, его использование позволяет пользователям отсматривать твиты определенной тематики, например твиты про ваш город или твиты про веб-дизайн.
Среди прочих хэш-тегов есть хэш-тег #drupal – которым пользуется сообщество drupal разработчиков со всего мира. Но есть особенность, дело в том что данным хэш-тегом пользуется преимущественно англоязычное сообщество, и просматривая твиты чувствуешь себя немного неуютно, хочется чтобы было по-русски.
Поэтому я начал в своих твитах про Drupal использовать хэш-тег #drupal_ru, и видимо пока только я один им пользуюсь.
В связи с этим призываю русскоязычное сообщество drupal-разработчиков поддержать новый хэш-тег. Я уверен, что группировка именно русскоязычных твитов о drupal будет способствовать и продвижению системы, и сплоченности русскоязычного сообщества, и обеспечит бОльшую отдачу от твитов.
Кроме того, если еще нет такого, то предлагаю создать модуль, позволяющий вести трансляцию твитов по хэш-тегу на сайте. Как например сделано тут www.uwdc.ru “Tweets #uwdc”.
Источник: http://www.drupal.ru/node/56173
Хочу рассказать о своем опыте работы с некоторыми аргументами Views.
И о тех случаях где их можно эффективно применять.
Часть 2.
Задача. Нужно вывести в блоке картинки текущей страницы.
Причем чтобы потом блок можно перемещать из колонки в колонку (из региона в регион).
На месте картинок может быть все что угодно, что есть в содержимом страницы.
Создаем новый Вид, добавляем вывод Блок и в его настройках кон фигурируем что нужно вывести в настройках Полей.
При необходимости указывать фильтры страницы из которой это берется.
Преимущество данного метода в том, что Views можно точнее настраивать, чем стандартные методы вывода.
Настройка аргумента.
В списке блоков нужно этот блок поместить в нужный регион.
Надеюсь, это будет полезно тем, кто этого не знал.
Источник: http://drupal.ru/node/56000
Хочу рассказать о своем опыте работы с некоторыми аргументами Views.
И о тех случаях где их можно эффективно применять.
Часть 2.
Задача. Нужно вывести в блоке картинки текущей страницы.
Причем чтобы потом блок можно перемещать из колонки в колонку (из региона в регион).
На месте картинок может быть все что угодно, что есть в содержимом страницы.
Создаем новый Вид, добавляем вывод Блок и в его настройках кон фигурируем что нужно вывести в настройках Полей.
При необходимости указывать фильтры страницы из которой это берется.
Преимущество данного метода в том, что Views можно точнее настраивать, чем стандартные методы вывода.
Настройка аргумента.
В списке блоков нужно этот блок поместить в нужный регион.
Надеюсь, это будет полезно тем, кто этого не знал.
Источник: http://www.drupal.ru/node/56000
Привет, друзья!
Я немного обновил проект Drupalogy: выставка сайтов, сделанных на Drupal. Изменения незначительные, но присутствуют.
UPD:
Изменена страница профайла пользователя
Добавлены уведомления о новых личных сообщениях
Добавлены ссылки «добавить в закладки», «поделиться в Facebook», «поделиться в вКонтакте». Страница с закладками есть в профайле.
Изменены:
дизайн
тема
логотип
переработан список категорий: их стало больше (часть переименована, часть удалена, часть добавлена)
Добавлены:
вывод последних комментариев (в футере)
рандомный показ сайтов с наивысшим рейтингом (в футере)
вывод всех комментариев пользователя (в профайле)
вывод списка разработчиков (выводятся все пользователи, добавившие хоть один сайт)
добавлено меню пользователя
добавлено диалоговое окно авторизации или регистрации
включены приватные сообщения
Изменена страница профайла пользователя
Добавлены уведомления о новых личных сообщениях
Добавлены ссылки «добавить в закладки», «поделиться в Facebook», «поделиться в вКонтакте». Страница с закладками есть в профайле.
Осталось:
темизировать страницы с данными пользователя (в процессе)
исправить мелкие недочёты
Сайт иногда может быть выключен:
просьба отнестись с пониманием: сайт делается в реальном времени, по причине того, что пользователи продолжают добавлять свои сайты в галерею.
Адрес проекта: drupalogy.ru или друпалогия.рф
Если у вас есть предложения, озвучивайте.
Хабрапользователи могут поддержать: http://habrahabr.ru/blogs/drupal/112319/
Источник: http://drupal.ru/node/55985
Привет, друзья!
Я немного обновил проект Drupalogy: выставка сайтов, сделанных на Drupal. Изменения незначительные, но присутствуют.
UPD:
Изменена страница профайла пользователя
Добавлены уведомления о новых личных сообщениях
Добавлены ссылки «добавить в закладки», «поделиться в Facebook», «поделиться в вКонтакте». Страница с закладками есть в профайле.
Изменены:
дизайн
тема
логотип
переработан список категорий: их стало больше (часть переименована, часть удалена, часть добавлена)
Добавлены:
вывод последних комментариев (в футере)
рандомный показ сайтов с наивысшим рейтингом (в футере)
вывод всех комментариев пользователя (в профайле)
вывод списка разработчиков (выводятся все пользователи, добавившие хоть один сайт)
добавлено меню пользователя
добавлено диалоговое окно авторизации или регистрации
включены приватные сообщения
Изменена страница профайла пользователя
Добавлены уведомления о новых личных сообщениях
Добавлены ссылки «добавить в закладки», «поделиться в Facebook», «поделиться в вКонтакте». Страница с закладками есть в профайле.
Осталось:
темизировать страницы с данными пользователя (в процессе)
исправить мелкие недочёты
Сайт иногда может быть выключен:
просьба отнестись с пониманием: сайт делается в реальном времени, по причине того, что пользователи продолжают добавлять свои сайты в галерею.
Адрес проекта: drupalogy.ru или друпалогия.рф
Если у вас есть предложения, озвучивайте.
Хабрапользователи могут поддержать: http://habrahabr.ru/blogs/drupal/112319/
Источник: http://www.drupal.ru/node/55985
Хотел, как лучше, а получилось опять 12 листов формата А4, поэтому здесь только анонс
В статье «CMS Drupal + AuthorIT против CMS Drupal + FCKeditor» было вскользь упомянуто об организации мультисайтинга связкой CMS Drupal + AuthortIT, в настоящей же статье:
* отчаявшимся выложена пошаговая инструкция по организации мультисайтинга на Drupal на хостинге it-patrol;
* любознательным разъяснена «физика» сотворенного;
* делаварам приведены количественные, качественные и эфемерные преимущества мультисайтинга;
* склонным к интригам повествовано о трагической судьбе председателя в условиях суровой социалистической действительности…
А сама статья здесь – http://tdocs.su/15050
ЗЫ. Напоминаю, что статья от начинающего для начинающих, поэтому прошу ногами сильно не пинать.
Attached poll “Интересен ли материал статьи?”.
Register or login to poll
Results:
Очень: 3 голоса
Да: 10 голосов
Не очень: 2 голоса
Нет: 1 голос
Я окончил МЭИ (МИФИ, МФТИ, МГУ, ВВИА им. Жуковского) и, будучи человеком деликатным, никогда не выберу предыдущую опцию!: 0 голосов
Источник: http://drupal.ru/node/55982
Хотел, как лучше, а получилось опять 12 листов формата А4, поэтому здесь только анонс
В статье «CMS Drupal + AuthorIT против CMS Drupal + FCKeditor» было вскользь упомянуто об организации мультисайтинга связкой CMS Drupal + AuthortIT, в настоящей же статье:
* отчаявшимся выложена пошаговая инструкция по организации мультисайтинга на Drupal на хостинге it-patrol;
* любознательным разъяснена «физика» сотворенного;
* делаварам приведены количественные, качественные и эфемерные преимущества мультисайтинга;
* склонным к интригам повествовано о трагической судьбе председателя в условиях суровой социалистической действительности…
А сама статья здесь – http://tdocs.su/15050
ЗЫ. Напоминаю, что статья от начинающего для начинающих, поэтому прошу ногами сильно не пинать.
Attached poll “Интересен ли материал статьи?”.
Register or login to poll
Results:
Очень: 3 голоса
Да: 10 голосов
Не очень: 2 голоса
Нет: 1 голос
Я окончил МЭИ (МИФИ, МФТИ, МГУ, ВВИА им. Жуковского) и, будучи человеком деликатным, никогда не выберу предыдущую опцию!: 0 голосов
Источник: http://www.drupal.ru/node/55982
Захотелось чтоб в Ubercart advanced catalog при выборе категории отображались товары из вложенных подкатегорий, а список категорий отображался картинками.
Результат можно посмотреть здесь: http://www.krasmebel.ru/shop/catalog/ofisnaya-mebel
Для этого
1. В представлении advanced_catalog заменил Аргумент Таксономия: ID Термина на
Таксономия: ID Термина (с глубиной)
2. Поправил
/sites/all/modules/uc_advanced_catalog/uc_advanced_catalog.module
Обновлено (исправленный вариант):
<?php
if ($count > 0) {
/* if (count($links)) {
$output .= theme('links', $links, array('class' => 'links inline uc-categories')) ."<br />\n";
}
// creating pager
ksort($row);
$rows[] = $row;
$pager = theme('table', array(), $rows, array('class' => 'pager-field'));
// output construction
$output .= $catalog->description;
*/
//My begin
// creating pager
ksort($row);
$rows[] = $row;
$pager = theme('table', array(), $rows, array('class' => 'pager-field'));
// original code
// Display table of child categories similar to an osCommerce site's front page.
$columns = variable_get('uc_catalog_category_columns', 3);
$cat_rows = array();
$row1 = array();
$i = 1;
foreach ($child_list as $cell) {
$row1[] = array('data' => $cell, 'class' => 'category');
if ($i % $columns == 0) {
$cat_rows[] = $row1;
$row1 = array();
}
$i++;
}
if (count($row1) > 0 && count($row1) < $columns) {
if (count($cat_rows) >= 1) {
$row1 = array_merge($row1, array_fill(count($row1), $columns - count($row1), array('data' => ' ', 'class' => 'category')));
}
$cat_rows[] = $row1;
}
$output .= $catalog->description;
$output .= theme('table', array(), $cat_rows, array('class' => 'category'));
//My end
?>
Источник: http://drupal.ru/node/55950
Захотелось чтоб в Ubercart advanced catalog при выборе категории отображались товары из вложенных подкатегорий, а список категорий отображался картинками.
Результат можно посмотреть здесь: http://www.krasmebel.ru/shop/catalog/ofisnaya-mebel
Для этого
1. В представлении advanced_catalog заменил Аргумент Таксономия: ID Термина на
Таксономия: ID Термина (с глубиной)
2. Поправил
/sites/all/modules/uc_advanced_catalog/uc_advanced_catalog.module
Обновлено (исправленный вариант):
<?php
if ($count > 0) {
/* if (count($links)) {
$output .= theme('links', $links, array('class' => 'links inline uc-categories')) ."<br />\n";
}
// creating pager
ksort($row);
$rows[] = $row;
$pager = theme('table', array(), $rows, array('class' => 'pager-field'));
// output construction
$output .= $catalog->description;
*/
//My begin
// creating pager
ksort($row);
$rows[] = $row;
$pager = theme('table', array(), $rows, array('class' => 'pager-field'));
// original code
// Display table of child categories similar to an osCommerce site's front page.
$columns = variable_get('uc_catalog_category_columns', 3);
$cat_rows = array();
$row1 = array();
$i = 1;
foreach ($child_list as $cell) {
$row1[] = array('data' => $cell, 'class' => 'category');
if ($i % $columns == 0) {
$cat_rows[] = $row1;
$row1 = array();
}
$i++;
}
if (count($row1) > 0 && count($row1) < $columns) {
if (count($cat_rows) >= 1) {
$row1 = array_merge($row1, array_fill(count($row1), $columns - count($row1), array('data' => ' ', 'class' => 'category')));
}
$cat_rows[] = $row1;
}
$output .= $catalog->description;
$output .= theme('table', array(), $cat_rows, array('class' => 'category'));
//My end
?>
Источник: http://www.drupal.ru/node/55950
На одном проекте была задача – реализовать поддержку снижения цен на товары на определенный процент в зависимости от роли пользователя. Нужно это было для организации работы с дилерами – у разных дилеров разный процент скидки. Реализовал я это с помощью модуля uc_percentage_price.
На странице конфигурации можно указать процент, который будет вычитаться из цены продажи и отображаться на сайте. Веса нужны для того, чтобы определить какой процент для скидки брать, если у пользователя несколько ролей. Преимуществом обладают меньшие веса.
Скачать можно здесь
Источник: http://drupal.ru/node/55759
На одном проекте была задача – реализовать поддержку снижения цен на товары на определенный процент в зависимости от роли пользователя. Нужно это было для организации работы с дилерами – у разных дилеров разный процент скидки. Реализовал я это с помощью модуля uc_percentage_price.
На странице конфигурации можно указать процент, который будет вычитаться из цены продажи и отображаться на сайте. Веса нужны для того, чтобы определить какой процент для скидки брать, если у пользователя несколько ролей. Преимуществом обладают меньшие веса.
Скачать можно здесь
Источник: http://www.drupal.ru/node/55759
С такой задачей я сталкиваюсь, когда приходится использовать многозначное поле imagefield для построения фотогалерей. Вывод иконок изображений в таблице лучше заполняет пространство веб-страницы да и выглядит аккуратнее, чем какой-либо другой способ. Конечно, есть и CSS-правила, позводляющие отображать любой тег HTML, как табличный, но работают они не во всех браузерах. И чем пытаться написать кроссбраузерный CSS, иногда проще вывести поля CCK в таблицу явно.
Для этого нам понадобиться переписать один шаблон для вывода поля и добавить в файл template.php вашей темы одну функцию.
Нам потребуется файл шаблона theme/content-field.tpl.php из модуля cck. Скопируйте его дважды в папку вашей темы (пусть она называется mytheme). У первую копии файла оставьте оригинальное название content-field.tpl.php, а вторую назовите content-field-ИМЯ_ПОЛЯ.tpl.php, где ИМЯ_ПОЛЯ – системное название того поля, которое вы хотите видеть в табличном виде.
Исходный код второго файла content-field-ИМЯ_ПОЛЯ.tpl.php потребуется изменить:
<?php if (!$field_empty) : ?>
<div class="field field-type-<?php print $field_type_css ?> field-<?php print $field_name_css ?>">
<?php if ($label_display == 'above') : ?>
<div class="field-label"><?php print t($label) ?>: </div>
<?php endif;?>
<?php
$attributes = array('class'=>'field-items');
$caption = $label_display == 'inline' ? t($label) : NULL;
print theme('table', array(), mytheme_fields2table($items, 3, NULL, TRUE), $attributes, $caption); ?>
</div>
<?php endif; ?>
Как видите, изменения коснулись вывода заголовка поля (в случае настройки inline он выводится в caption таблицы), добавилась также дополнительная функция, которая преобразует набор значений поля $items в вид пригодный для прямого вывода в таблицу из трех столбцов.
Главная задача функции mytheme_fields2table() состоит в том, чтобы преобразовать список полей $items в массив, подходящий для функции theme_table(). Её код надо разместить в файле tempalte.php вашей темы (если файла нет, создайте его). Название функции должно начинаться с системного названия вашей темы (апример, mytheme).
Код функции:
function mytheme_fields2table($items, $width=NULL, $height=NULL, $by_strings=TRUE){
// Считаем количество непустых полей
$count = 0;
$tmp = array();
foreach ($items as $delta => $item)
if (!$item['empty']) {
$tmp[] = $item;
$count++;
}
// Вычисляем размер таблицы на основании числа полей и принятых параметров высоты и/или ширины
if(!$width && !$height && !$by_strings) {
$sqrt = sqrt((float) $count);
$height = ceil($sqrt);
$width = ceil($count/$height);
} elseif(!$width && !$height && $by_strings) {
$sqrt = sqrt((float) $count);
$width = ceil($sqrt);
$height = ceil($count/$width);
} elseif($width && $height && !$by_strings) {
$max_count = $width*$height;
$width = $max_count > $count ? ceil($count/$height) : $width;
} elseif($width && $height && $by_strings) {
$max_count = $width*$height;
$height = $max_count > $count ? ceil($count/$width) : $height;
} elseif($width) {
$height = ceil($count/$width);
} else {
$width = ceil($count/$height);
}
// Заполняем строки таблицы при необходимости добавляя пустые ячейки или отбразывая лишние поля
$rows = array();
$empty = array('data'=>'', 'class'=>'field-item-empty');
for ($i=0;$i<$height;$i++){
$line = array();
for ($j=0;$j<$width;$j++){
$index = $by_strings ? $i*$width+$j : $j*$height+$i;
$line[] = empty($tmp[$index]) ? $empty : array('data'=>$tmp[$index]['view'], 'class'=>'field-item');
}
$rows[] = $line;
}
return $rows;
}
Параметры функции:
$items – исходные массив значений поля. Часто он содержит больше элементов, чем есть полей на самом деле, поэтому их количество отдельно считается в начале функции.
$width – ширина таблицы или количество ячеек в строке.
$height – высота таблицы или количество ячеек в столбце.
$by_strings – способ заполнения таблицы. TRUE – заполняется по строкам, FALSE – по столбцам.
Если задан один из параметров – высота или ширина, то таблица будет ограничена этой высотой или шириной, второй параметр будет вычисляться в зависимости от количества элементов поля. Если не задан ни один, то таблица будет максимально близкой к квадратной. Если же задать оба параметра, то таблица не превысит указанного размера, при этом лишние элементы поля будут отброшены.
Способ подходит для любых полей CCK.
Источники:
Табличная темизация многозначных полей CCK
Модуль CCK
Исходный код файла content-field.tpl.php
Источник: http://drupal.ru/node/55728
С такой задачей я сталкиваюсь, когда приходится использовать многозначное поле imagefield для построения фотогалерей. Вывод иконок изображений в таблице лучше заполняет пространство веб-страницы да и выглядит аккуратнее, чем какой-либо другой способ. Конечно, есть и CSS-правила, позводляющие отображать любой тег HTML, как табличный, но работают они не во всех браузерах. И чем пытаться написать кроссбраузерный CSS, иногда проще вывести поля CCK в таблицу явно.
Для этого нам понадобиться переписать один шаблон для вывода поля и добавить в файл template.php вашей темы одну функцию.
Нам потребуется файл шаблона theme/content-field.tpl.php из модуля cck. Скопируйте его дважды в папку вашей темы (пусть она называется mytheme). У первую копии файла оставьте оригинальное название content-field.tpl.php, а вторую назовите content-field-ИМЯ_ПОЛЯ.tpl.php, где ИМЯ_ПОЛЯ – системное название того поля, которое вы хотите видеть в табличном виде.
Исходный код второго файла content-field-ИМЯ_ПОЛЯ.tpl.php потребуется изменить:
<?php if (!$field_empty) : ?>
<div class="field field-type-<?php print $field_type_css ?> field-<?php print $field_name_css ?>">
<?php if ($label_display == 'above') : ?>
<div class="field-label"><?php print t($label) ?>: </div>
<?php endif;?>
<?php
$attributes = array('class'=>'field-items');
$caption = $label_display == 'inline' ? t($label) : NULL;
print theme('table', array(), mytheme_fields2table($items, 3, NULL, TRUE), $attributes, $caption); ?>
</div>
<?php endif; ?>
Как видите, изменения коснулись вывода заголовка поля (в случае настройки inline он выводится в caption таблицы), добавилась также дополнительная функция, которая преобразует набор значений поля $items в вид пригодный для прямого вывода в таблицу из трех столбцов.
Главная задача функции mytheme_fields2table() состоит в том, чтобы преобразовать список полей $items в массив, подходящий для функции theme_table(). Её код надо разместить в файле tempalte.php вашей темы (если файла нет, создайте его). Название функции должно начинаться с системного названия вашей темы (апример, mytheme).
Код функции:
function mytheme_fields2table($items, $width=NULL, $height=NULL, $by_strings=TRUE){
// Считаем количество непустых полей
$count = 0;
$tmp = array();
foreach ($items as $delta => $item)
if (!$item['empty']) {
$tmp[] = $item;
$count++;
}
// Вычисляем размер таблицы на основании числа полей и принятых параметров высоты и/или ширины
if(!$width && !$height && !$by_strings) {
$sqrt = sqrt((float) $count);
$height = ceil($sqrt);
$width = ceil($count/$height);
} elseif(!$width && !$height && $by_strings) {
$sqrt = sqrt((float) $count);
$width = ceil($sqrt);
$height = ceil($count/$width);
} elseif($width && $height && !$by_strings) {
$max_count = $width*$height;
$width = $max_count > $count ? ceil($count/$height) : $width;
} elseif($width && $height && $by_strings) {
$max_count = $width*$height;
$height = $max_count > $count ? ceil($count/$width) : $height;
} elseif($width) {
$height = ceil($count/$width);
} else {
$width = ceil($count/$height);
}
// Заполняем строки таблицы при необходимости добавляя пустые ячейки или отбразывая лишние поля
$rows = array();
$empty = array('data'=>'', 'class'=>'field-item-empty');
for ($i=0;$i<$height;$i++){
$line = array();
for ($j=0;$j<$width;$j++){
$index = $by_strings ? $i*$width+$j : $j*$height+$i;
$line[] = empty($tmp[$index]) ? $empty : array('data'=>$tmp[$index]['view'], 'class'=>'field-item');
}
$rows[] = $line;
}
return $rows;
}
Параметры функции:
$items – исходные массив значений поля. Часто он содержит больше элементов, чем есть полей на самом деле, поэтому их количество отдельно считается в начале функции.
$width – ширина таблицы или количество ячеек в строке.
$height – высота таблицы или количество ячеек в столбце.
$by_strings – способ заполнения таблицы. TRUE – заполняется по строкам, FALSE – по столбцам.
Если задан один из параметров – высота или ширина, то таблица будет ограничена этой высотой или шириной, второй параметр будет вычисляться в зависимости от количества элементов поля. Если не задан ни один, то таблица будет максимально близкой к квадратной. Если же задать оба параметра, то таблица не превысит указанного размера, при этом лишние элементы поля будут отброшены.
Способ подходит для любых полей CCK.
Источники:
Табличная темизация многозначных полей CCK
Модуль CCK
Исходный код файла content-field.tpl.php
Источник: http://www.drupal.ru/node/55728
Довольно распространенный модуль Livejournal Crossposter (ljxp) предназначен для автоматической публикации материалов Drupal-сайтов на Livejournal-совместимых сервисах. Я уже как-то писал о его установке и настройке у себя в блоге и на Drupal.ru. Но у модуля есть один существенный недостаток – он кросспостит в ЖЖ только стандартные заголовки ноды и ее тело (body) в виде тизера или полного текста. Поля CCK в нем полностью игнорируются. И устранить этот недостаток пока можно только хаком.
Сам модуль ljxp достаточно прост по своему устройству. Чтобы найти код, который формирует части сообщения передаваемого в ЖЖ через xmlrpc откроем основной файл модуля ljxp.module (я использовал последнюю версию 1.6). Найдем в нем функцию ljxp_post() в строке 402. Именно она и формирует из ноды требуемое по спецификации API ЖЖ сообщение и передает его на сайт. Если вы не используете системное body, то поля переменной $node->teaser и $node->body содержат пустое значение. Именно здесь мы их и можем заполнить любым содержанием.
В принципе на этом идея хака понятна, но приведу один практический пример из собственных проектов. Я редко использую body, а для имитации его функционала применяю два поля: Анонс (field_resume) и Полный текст (field_text). В моем случае хак выглядит так (со строки 403):
// begin of hack
$node->teaser = $node->field_resume[0]['value'];
$node->body = $node->field_resume[0]['value'] . $node->field_text[0]['value'];
// end of hack
В вашем случае потребуется написать другой код, зависящий от названий ваших полей и от того что вы желаете видеть до ЖЖ-ката, а что после.
Есть и другой вариант, который подойдет для ноды с любым количеством полей:
// begin of hack
$node->teaser = node_view($node, TRUE, FALSE, FALSE);
$node->body = node_view($node, FALSE, FALSE, FALSE);
// end of hack
Из недостатков, вы не сможете запостить таким образом поля со ссылками, файлы или картинки. Работа хака проверена только на текстовых полях.
Да, знаю хак это плохо, но в данном случае иначе никак.
Источник: http://drupal.ru/node/55634
Довольно распространенный модуль Livejournal Crossposter (ljxp) предназначен для автоматической публикации материалов Drupal-сайтов на Livejournal-совместимых сервисах. Я уже как-то писал о его установке и настройке у себя в блоге и на Drupal.ru. Но у модуля есть один существенный недостаток – он кросспостит в ЖЖ только стандартные заголовки ноды и ее тело (body) в виде тизера или полного текста. Поля CCK в нем полностью игнорируются. И устранить этот недостаток пока можно только хаком.
Сам модуль ljxp достаточно прост по своему устройству. Чтобы найти код, который формирует части сообщения передаваемого в ЖЖ через xmlrpc откроем основной файл модуля ljxp.module (я использовал последнюю версию 1.6). Найдем в нем функцию ljxp_post() в строке 402. Именно она и формирует из ноды требуемое по спецификации API ЖЖ сообщение и передает его на сайт. Если вы не используете системное body, то поля переменной $node->teaser и $node->body содержат пустое значение. Именно здесь мы их и можем заполнить любым содержанием.
В принципе на этом идея хака понятна, но приведу один практический пример из собственных проектов. Я редко использую body, а для имитации его функционала применяю два поля: Анонс (field_resume) и Полный текст (field_text). В моем случае хак выглядит так (со строки 403):
// begin of hack
$node->teaser = $node->field_resume[0]['value'];
$node->body = $node->field_resume[0]['value'] . $node->field_text[0]['value'];
// end of hack
В вашем случае потребуется написать другой код, зависящий от названий ваших полей и от того что вы желаете видеть до ЖЖ-ката, а что после.
Есть и другой вариант, который подойдет для ноды с любым количеством полей:
// begin of hack
$node->teaser = node_view($node, TRUE, FALSE, FALSE);
$node->body = node_view($node, FALSE, FALSE, FALSE);
// end of hack
Из недостатков, вы не сможете запостить таким образом поля со ссылками, файлы или картинки. Работа хака проверена только на текстовых полях.
Да, знаю хак это плохо, но в данном случае иначе никак.
Источник: http://www.drupal.ru/node/55634
Несколько запоздало (в свете выхода 7-й версии) представляю свою сборку Drupal 6.x + Ubercart 2.x под названием OpenStore.
Сайт проекта OpenStore
Скачать OpenStore
UPD от 22.01.2011 Качаем последний dev!
Более 2-х лет назад я столкнулся с такой штукой как Drupal пятой модели. Мой интерес был практический – сделать интернет-магазин, который можно было бы расширять по мере необходимости, имел бы понятную архитектуру, и тд… До этого у меня были непродолжительные романы с другими решениями для e-commerce вроде Oscommerce и проч., к которым я довольно быстро охладел.
Drupal был свеж, заманчив, обещал много разных благ, а в связке с Ubercart, похоже, должен был дать всё то, о чём я и не мечтал. Я решил смастерить свой свечной заводик в течении месяца-два… Но, господа, недаром Друпликон ухмыляется как Мона Лиза
Самостоятельная разботка интернет-магазина на основе Drupal для человека, незнакомого с API Drupal, и, тем более, с php, и, тем более, с базовыми знаниями CSS+HTML представляет собой кромешный ад и не может быть рекомендована, если вы хотите просто начать свой бизнес в сети, т.е вас интересует немедленный результат
Сборка OpenStore – это, образно говоря, попытка понизить пресловутый «порог вхождения» для систем на основе Drupal. При установке подключаются все нужные (как по мне) модули, делаются необходимые настройки путём записи соответсвующих значений в БД. Вы получаете готовый к употреблению магазин (во всяком случае так задумано), сэкономив КУЧУ времени, затраченное на курение мануалов, основная часть которых на английском и терзание Google
Аналогичные решения
На данный момент науке известны такие сборки на основе Drupal+Ubercart:
UberDrupal. Даже не сборка, а обычный инсталляционный профиль Ubercart, никак не решающий основных проблем при разработке интернет-магазина. Обновляется нечасто, обновления связаны с существующими багами, без внедрения дополнительных фич
http://drupal-shop.ru – пожалуй первая попытка создания сборки магазина. Система мне неизвестна, так как небесплатна. По всем внешним признакам (динамика публикаций, выхода обновлений и тд) похоже, что проект приостановлен либо перешёл в вялотекущее состояние.
http://www.drushop.ru — наиболее известное бесплатное решение на сегодня, но обладающий одним существенным недостатком — установочный профиль загружает готовый дамп базы данных, содержащий настройки системы. Этот наиболее лёгкий и одновременно наиболее плохой способ переноса конфигураций для реального сайта, несущий серьёзные потенциальные проблемы в будущем при обновлении и дебага сборки. По всем внешним признакам (динамика публикаций, выхода обновлений и тд) похоже, что проект приостановлен либо перешёл в вялотекущее состояние.
В сравнении с вышеуказанными сборками, OpenStore – это лучшее, что может случиться с вами. Реально. Объективно.
Возможности сборки интернет-магазина OpenStore
Возможности сборки как правило определяются теми фичами, которые дают модули, в неё входящие. Модули разрабатывались множеством совершенно разных людей из разных стран, так что проект можно сказать интернациональный
Помним и благодарим героев
Дабы не утомлять сообщество перечислением фич, некоторые базовые возможности сборки указаны здесь
В чём изюм
Являясь завсегдатаем форума русскоязычного сообщества Drupal.ru, я постоянно вижу, как множественные парни и девушки, пронюхав о существовании чудесного движка Друпал, на котором даже не стесняются делать сайт американского Белого дома, пытаются создать свой интернет-магазин и натыкаются на одни и те же грабли и задают одни и те же вопросы, которые так или иначе касаются темизации.
Кто бы спорил, есть три вещи, на которые можно смотреть вечно:
1. как горит огонь
2. как течет вода
3. как кто-то пытается оттемизировать то, что породил Друпал
Между тем, сам Друпал обладает широкими возможностями для темизации, о коих многие неискушённые пользователи даже не догадываются. Поэтому в своей сборке я попытался уделить внимание этому аспекту.
В OpenStore широко используется функция hook_preprocess(), позволяющая самостоятельно определять или модифицировать существующие переменные, которые выводят различную информацию (картинки, цены, кнопка «Добавить в корзину» и многое другое…)
Например, вывести в произвольном месте кнопку «Добавить в корзину»
<?php print $show_cart_button; ?>
Или, вывести одним махом блок с «быстрыми закладками», содержащий характеристики товара, медиа-файлы, отзывы, дополнительные картинки
<?php print $show_product_tabs; ?>
Пример, как это это может выглядеть
Функция hook_preprocess() используется не только для страниц товаров, а и для профиля пользователя, а также для форм редактирования и добавления страниц.
Ваши контент-менеджеры, заполняющие страницы с товаров, теперь скажут вам «Спасибо, друг!». С помощью нехитрых php-сниппетов, наподобии указанных выше, вы можете переставлять поля и кнопки как душе угодно
Внешнее оформление для фронт-енда (видят покупатели) и бэк-енда (видят администраторы) разделено. Тема “Frontend” и “Administrator” соответсвенно
Тема “Adminastrator” (рабочее название “Антиблондинка”) – самая симпатичная тема продвинутого администратора на данный момент
Ужас, летящий в ночи, под названием “Garland”…улетел.
Я убрал все ссылки настроек, которые обычно пугают неокрепшие умы, в выдвижную панель наверху и она всегда незримо с вами. Теперь у нас 5 основных закладок перед глазами:
1. Управление
2. Магазин
3. Очереди
4. Заказы
5. Страницы
Закладка «Управление» – основная страница по адресу /admin, так называемая «Панель управления» размечена на регионы, в которые можно вставлять любые блоки. Подчёркиваю, любые.
По умолчанию там выведены блоки с диаграммами, показывающие статистику посещений от Google Analytics, графики состояния ситемы (пользователи, страницы, системный журнал), последние заказы, последние зарегистрированные пользователи, последние рассылки
2 типа переключения блоков:
1. Горизонтальные «быстрые» закладки на Jquery
2. Сворачивающиеся поля с эффектом запоминания (используются cookie) положения на Jquery
Закладка «Магазин» – страница по адресу /admin/store, где собрано всё, что касается именно Ubercart. Раньше это была скучная таблица, теперь — сексуальный интерфейс.
Закладка «Очереди» – управление позициями элементов в разных списках («Рекомендованные товары», «Новости» и тд) через удобный drag&drop интерфейс
Закладка «Заказы» – страница с последними заказами магазина
Закладка «Страница» – основной менеджер страниц магазина с фильтрами и массовыми операциями.
Если вы делаете магазина на заказ и применяете в нём «Adminastrator», думаю, ваш заказчик будет отсатисфачен по-полной.
Также, в сборке множество всяческих улучшений, о которых можно писать довольно долго и без которых сам по себе Drupal и Ubercart выглядит немного неопрятно, если не сказать топорно.
Установка
Всё как обычно. Скачиваете зелёненькое, распаковываете архив со сборкой куда надо, например в корневую директорию домена domain.com, затем набираете http://domain.com, выбираете профиль установки «OpenStore» и следуете дальнейшим инструкциям. Может потребоваться корректировка параметра max_execution_time в сторону увеличения.
В планах, помимо исправления текущих ошибок:
1) Написание глобальной документации для администраторов магазина. Скорее всего это будет встроенная справка, через модуль Advanced Help
2)Привести в порядок сайт проекта. Возможно переделать полностью. Многие страницы пусты из-за недостатка времени, чтобы в них написать что-то.
3)Разобраться с применением скидок, т.е упорядочить через Сonditional Actions и, в перспективе, через Rules (для 7-й версии)
4) Написать модуль, позволяющий делать нормальные фильтры, как это принято в обычных магазинах, т.е фильтр по диапазонам цен, производителям и тд.
5) Разобраться с массовым обновлением цен и наличия. В составе сборки есть такой модуль, но он требует улучшения
6)Предпринять попытку интегрировать таки с 1С
7) Поработать над внешним оформлением. Текущая тема Frontend впринципе неплоха как стартовая тема, в то же время есть понимание, что это может (и должно) выглядеть гораздо лучше. Ищу хорошего дизайнера!
Помочь проекту
1) Мне нужен фидбек от каждого, кому интересна эта тема. На основании вашей активности я решу, должна ли существовать и в каком направлении развиваться эта сборка. Будут версии для Друпал 7 и выше и на качественно новом уровне, но в том случае, если я увижу, что это будет реально востребовано.
2) Нужна помощь дизайнера. То, как это всё выглядет сейчас мне не очень нравится. Нужно разработать единый стиль всего проекта и сделать дизайн в графическом формате. Я имею ввиду внешний вид админки, самого фронтенда, сайта проекта. Я не могу платить за дизайн именно сейчас, поэтому предлагаю взамен такие блага:
Общее оздоровление кармы за счёт участия в Open Source
Почётное звание дизайнера проекта, со ссылкой на ваш ресурс с главной сайта проекта
Ссылки на вас со страниц разработанных вами тем
Лучшие рекомендации с моей стороны, приоритет в сотрудничестве в будущем.
Всё разработанное вами может и ДОЛЖНО быть использовано в вашем портфолио. Незачем наполнять свой портфель, задёшево продавая свои умения. Сделайте для всех и без денег.
3) Нужна помощь программеров. Приоритетные задачи: интеграция с 1С, толковый импорт/обновление товарной базы. Плюс куча всего по мелочам. Форма сотрудничества оговаривается индивидуально, но принцип всегда один — «ты мне, я тебе»
…и ещё
Отзывы, замечания о найденных багах, пожелания просьба оставлять ТОЛЬКО в багтреккере проекта. Не оставляйте их в этом топике, мне их будет сложно отслеживать.
Проект реализован по общественной лицензии GNU . Никаких гарантий и ответственности за возможный ущерб до тех пор, пока вы не платите за софт.
Это beta релиз. Я долго и упорно работал над этой сборкой, было несколько глобальных переделок. Что-то могло затереться, очевидные вещи могут не работать или работать не так, как это ожидается. Всё же я решил сделать публичный релиз, чтобы народ посмотрел свежим глазом. Просьба относиться с пониманием.
Для опытных программистов: местами мой код не отличается изяществом. Буду рад конструктивным замечаниям по оптимизации этого.
Вот то, что я хотел сказать на данный момент.
Спасибо за внимание.
————————————
Важные объявления:
Разобрался в настройках Openstore сам и хочешь помочь другим? Нужны добровольцы для написания руководства пользователя интернет магазина на основе Уберкарт!
Сделал таки магазин с использованием сборки OpenStore?
Отправь своё детище на мыло openstore.org.ua@gmail.com c указанием своего логина на сайте проекта www.openstore.org.ua. Я размещу на этот магазин прямую ссылку с сайта проекта!
Источник: http://drupal.ru/node/55621
Несколько запоздало (в свете выхода 7-й версии) представляю свою сборку Drupal 6.x + Ubercart 2.x под названием OpenStore.
Сайт проекта OpenStore
Скачать OpenStore
UPD от 22.01.2011 Качаем последний dev!
Более 2-х лет назад я столкнулся с такой штукой как Drupal пятой модели. Мой интерес был практический – сделать интернет-магазин, который можно было бы расширять по мере необходимости, имел бы понятную архитектуру, и тд… До этого у меня были непродолжительные романы с другими решениями для e-commerce вроде Oscommerce и проч., к которым я довольно быстро охладел.
Drupal был свеж, заманчив, обещал много разных благ, а в связке с Ubercart, похоже, должен был дать всё то, о чём я и не мечтал. Я решил смастерить свой свечной заводик в течении месяца-два… Но, господа, недаром Друпликон ухмыляется как Мона Лиза
Самостоятельная разботка интернет-магазина на основе Drupal для человека, незнакомого с API Drupal, и, тем более, с php, и, тем более, с базовыми знаниями CSS+HTML представляет собой кромешный ад и не может быть рекомендована, если вы хотите просто начать свой бизнес в сети, т.е вас интересует немедленный результат
Сборка OpenStore – это, образно говоря, попытка понизить пресловутый «порог вхождения» для систем на основе Drupal. При установке подключаются все нужные (как по мне) модули, делаются необходимые настройки путём записи соответсвующих значений в БД. Вы получаете готовый к употреблению магазин (во всяком случае так задумано), сэкономив КУЧУ времени, затраченное на курение мануалов, основная часть которых на английском и терзание Google
Аналогичные решения
На данный момент науке известны такие сборки на основе Drupal+Ubercart:
UberDrupal. Даже не сборка, а обычный инсталляционный профиль Ubercart, никак не решающий основных проблем при разработке интернет-магазина. Обновляется нечасто, обновления связаны с существующими багами, без внедрения дополнительных фич
http://drupal-shop.ru – пожалуй первая попытка создания сборки магазина. Система мне неизвестна, так как небесплатна. По всем внешним признакам (динамика публикаций, выхода обновлений и тд) похоже, что проект приостановлен либо перешёл в вялотекущее состояние.
http://www.drushop.ru — наиболее известное бесплатное решение на сегодня, но обладающий одним существенным недостатком — установочный профиль загружает готовый дамп базы данных, содержащий настройки системы. Этот наиболее лёгкий и одновременно наиболее плохой способ переноса конфигураций для реального сайта, несущий серьёзные потенциальные проблемы в будущем при обновлении и дебага сборки. По всем внешним признакам (динамика публикаций, выхода обновлений и тд) похоже, что проект приостановлен либо перешёл в вялотекущее состояние.
В сравнении с вышеуказанными сборками, OpenStore – это лучшее, что может случиться с вами. Реально. Объективно.
Возможности сборки интернет-магазина OpenStore
Возможности сборки как правило определяются теми фичами, которые дают модули, в неё входящие. Модули разрабатывались множеством совершенно разных людей из разных стран, так что проект можно сказать интернациональный
Помним и благодарим героев
Дабы не утомлять сообщество перечислением фич, некоторые базовые возможности сборки указаны здесь
В чём изюм
Являясь завсегдатаем форума русскоязычного сообщества Drupal.ru, я постоянно вижу, как множественные парни и девушки, пронюхав о существовании чудесного движка Друпал, на котором даже не стесняются делать сайт американского Белого дома, пытаются создать свой интернет-магазин и натыкаются на одни и те же грабли и задают одни и те же вопросы, которые так или иначе касаются темизации.
Кто бы спорил, есть три вещи, на которые можно смотреть вечно:
1. как горит огонь
2. как течет вода
3. как кто-то пытается оттемизировать то, что породил Друпал
Между тем, сам Друпал обладает широкими возможностями для темизации, о коих многие неискушённые пользователи даже не догадываются. Поэтому в своей сборке я попытался уделить внимание этому аспекту.
В OpenStore широко используется функция hook_preprocess(), позволяющая самостоятельно определять или модифицировать существующие переменные, которые выводят различную информацию (картинки, цены, кнопка «Добавить в корзину» и многое другое…)
Например, вывести в произвольном месте кнопку «Добавить в корзину»
<?php print $show_cart_button; ?>
Или, вывести одним махом блок с «быстрыми закладками», содержащий характеристики товара, медиа-файлы, отзывы, дополнительные картинки
<?php print $show_product_tabs; ?>
Пример, как это это может выглядеть
Функция hook_preprocess() используется не только для страниц товаров, а и для профиля пользователя, а также для форм редактирования и добавления страниц.
Ваши контент-менеджеры, заполняющие страницы с товаров, теперь скажут вам «Спасибо, друг!». С помощью нехитрых php-сниппетов, наподобии указанных выше, вы можете переставлять поля и кнопки как душе угодно
Внешнее оформление для фронт-енда (видят покупатели) и бэк-енда (видят администраторы) разделено. Тема “Frontend” и “Administrator” соответсвенно
Тема “Adminastrator” (рабочее название “Антиблондинка”) – самая симпатичная тема продвинутого администратора на данный момент
Ужас, летящий в ночи, под названием “Garland”…улетел.
Я убрал все ссылки настроек, которые обычно пугают неокрепшие умы, в выдвижную панель наверху и она всегда незримо с вами. Теперь у нас 5 основных закладок перед глазами:
1. Управление
2. Магазин
3. Очереди
4. Заказы
5. Страницы
Закладка «Управление» – основная страница по адресу /admin, так называемая «Панель управления» размечена на регионы, в которые можно вставлять любые блоки. Подчёркиваю, любые.
По умолчанию там выведены блоки с диаграммами, показывающие статистику посещений от Google Analytics, графики состояния ситемы (пользователи, страницы, системный журнал), последние заказы, последние зарегистрированные пользователи, последние рассылки
2 типа переключения блоков:
1. Горизонтальные «быстрые» закладки на Jquery
2. Сворачивающиеся поля с эффектом запоминания (используются cookie) положения на Jquery
Закладка «Магазин» – страница по адресу /admin/store, где собрано всё, что касается именно Ubercart. Раньше это была скучная таблица, теперь — сексуальный интерфейс.
Закладка «Очереди» – управление позициями элементов в разных списках («Рекомендованные товары», «Новости» и тд) через удобный drag&drop интерфейс
Закладка «Заказы» – страница с последними заказами магазина
Закладка «Страница» – основной менеджер страниц магазина с фильтрами и массовыми операциями.
Если вы делаете магазина на заказ и применяете в нём «Adminastrator», думаю, ваш заказчик будет отсатисфачен по-полной.
Также, в сборке множество всяческих улучшений, о которых можно писать довольно долго и без которых сам по себе Drupal и Ubercart выглядит немного неопрятно, если не сказать топорно.
Установка
Всё как обычно. Скачиваете зелёненькое, распаковываете архив со сборкой куда надо, например в корневую директорию домена domain.com, затем набираете http://domain.com, выбираете профиль установки «OpenStore» и следуете дальнейшим инструкциям. Может потребоваться корректировка параметра max_execution_time в сторону увеличения.
В планах, помимо исправления текущих ошибок:
1) Написание глобальной документации для администраторов магазина. Скорее всего это будет встроенная справка, через модуль Advanced Help
2)Привести в порядок сайт проекта. Возможно переделать полностью. Многие страницы пусты из-за недостатка времени, чтобы в них написать что-то.
3)Разобраться с применением скидок, т.е упорядочить через Сonditional Actions и, в перспективе, через Rules (для 7-й версии)
4) Написать модуль, позволяющий делать нормальные фильтры, как это принято в обычных магазинах, т.е фильтр по диапазонам цен, производителям и тд.
5) Разобраться с массовым обновлением цен и наличия. В составе сборки есть такой модуль, но он требует улучшения
6)Предпринять попытку интегрировать таки с 1С
7) Поработать над внешним оформлением. Текущая тема Frontend впринципе неплоха как стартовая тема, в то же время есть понимание, что это может (и должно) выглядеть гораздо лучше. Ищу хорошего дизайнера!
Помочь проекту
1) Мне нужен фидбек от каждого, кому интересна эта тема. На основании вашей активности я решу, должна ли существовать и в каком направлении развиваться эта сборка. Будут версии для Друпал 7 и выше и на качественно новом уровне, но в том случае, если я увижу, что это будет реально востребовано.
2) Нужна помощь дизайнера. То, как это всё выглядет сейчас мне не очень нравится. Нужно разработать единый стиль всего проекта и сделать дизайн в графическом формате. Я имею ввиду внешний вид админки, самого фронтенда, сайта проекта. Я не могу платить за дизайн именно сейчас, поэтому предлагаю взамен такие блага:
Общее оздоровление кармы за счёт участия в Open Source
Почётное звание дизайнера проекта, со ссылкой на ваш ресурс с главной сайта проекта
Ссылки на вас со страниц разработанных вами тем
Лучшие рекомендации с моей стороны, приоритет в сотрудничестве в будущем.
Всё разработанное вами может и ДОЛЖНО быть использовано в вашем портфолио. Незачем наполнять свой портфель, задёшево продавая свои умения. Сделайте для всех и без денег.
3) Нужна помощь программеров. Приоритетные задачи: интеграция с 1С, толковый импорт/обновление товарной базы. Плюс куча всего по мелочам. Форма сотрудничества оговаривается индивидуально, но принцип всегда один — «ты мне, я тебе»
…и ещё
Отзывы, замечания о найденных багах, пожелания просьба оставлять ТОЛЬКО в багтреккере проекта. Не оставляйте их в этом топике, мне их будет сложно отслеживать.
Проект реализован по общественной лицензии GNU . Никаких гарантий и ответственности за возможный ущерб до тех пор, пока вы не платите за софт.
Это beta релиз. Я долго и упорно работал над этой сборкой, было несколько глобальных переделок. Что-то могло затереться, очевидные вещи могут не работать или работать не так, как это ожидается. Всё же я решил сделать публичный релиз, чтобы народ посмотрел свежим глазом. Просьба относиться с пониманием.
Для опытных программистов: местами мой код не отличается изяществом. Буду рад конструктивным замечаниям по оптимизации этого.
Вот то, что я хотел сказать на данный момент.
Спасибо за внимание.
————————————
Важные объявления:
Разобрался в настройках Openstore сам и хочешь помочь другим? Нужны добровольцы для написания руководства пользователя интернет магазина на основе Уберкарт!
Сделал таки магазин с использованием сборки OpenStore?
Отправь своё детище на мыло openstore.org.ua@gmail.com c указанием своего логина на сайте проекта www.openstore.org.ua. Я размещу на этот магазин прямую ссылку с сайта проекта!
Источник: http://www.drupal.ru/node/55621
По мотивам обсуждения http://drupal.ru/node/53748 сделал модуль расчета доставки средствами EMS Russia.
Модуль использует родные поля доставки, предоставленные уберкартом.
Т.е. человек при оформлении заказа выбирает область, и вписывает город. город при необходимости (если не найден в базе ems) чистится от “г,пос,…”, и проверяется еще раз. Если фейл – считаем как до региона. Есть поддержка международных отправлений.
Адрес проекта: http://drupal.org/project/uc_ems
Скрины:
“Нет связи с EMS”:
Страница сеттингов:
Как видите, есть настройки типа добавочной стоимости.
В итоге был так же создан багрепорт в Уберкарт (устарели регионы России, модуль это пока решает динамической подменой вводимых пользователем данных):
http://drupal.org/node/1027060
Если кто-то хочет материально отблагодарить разработчика, т.е. меня, я не против
В комментарии к переводу просьба писать “ems от [ник на drupal.ru]“, если хотите быть упомянуты на странице модуля drupal.org – сообщайте с каким урлом/именем.
Yandex.money
transfer-pay@yandex.ru
или номер счета: 4100190415303
Webmoney
Z352678179207
R114412215620
E406623242647
Источник: http://drupal.ru/node/55610
По мотивам обсуждения http://drupal.ru/node/53748 сделал модуль расчета доставки средствами EMS Russia.
Модуль использует родные поля доставки, предоставленные уберкартом.
Т.е. человек при оформлении заказа выбирает область, и вписывает город. город при необходимости (если не найден в базе ems) чистится от “г,пос,…”, и проверяется еще раз. Если фейл – считаем как до региона. Есть поддержка международных отправлений.
Адрес проекта: http://drupal.org/project/uc_ems
Скрины:
“Нет связи с EMS”:
Страница сеттингов:
Как видите, есть настройки типа добавочной стоимости.
В итоге был так же создан багрепорт в Уберкарт (устарели регионы России, модуль это пока решает динамической подменой вводимых пользователем данных):
http://drupal.org/node/1027060
Если кто-то хочет материально отблагодарить разработчика, т.е. меня, я не против
В комментарии к переводу просьба писать “ems от [ник на drupal.ru]“, если хотите быть упомянуты на странице модуля drupal.org – сообщайте с каким урлом/именем.
Yandex.money
transfer-pay@yandex.ru
или номер счета: 4100190415303
Webmoney
Z352678179207
R114412215620
E406623242647
Источник: http://www.drupal.ru/node/55610
Как и было обещано, пишу.
Задача:
Изучить возможности Hierarhical Select и научиться его использовать в своих сайтах.
Техническое задание:
Разработать сайт, который будет показывать участников в проектах.
Набор софта:
Drupal 6.20 русская локаль
Модули: CCK, taxonomy, hierarchital_select
Начнём с установки.
Как ставить друп рассказывать не буду (смайлик). CCK и taxonomy закидываются в modules, HS закидывается в sites/all/modules
Отмечаем их галками в /admin/build/modules/list и жмём “сохранить конфигурацию”.
После этого делаем /update.php для корректной установки HS. Идём в /admin/reports/status и убеждаемся в корректности установки.
Установка закончена.
Теперь, давайте подготовим словарь, для реализации нашего ТЗ.
Словарь будет иметь структуру отдел->сотрудник
Сделаем это!
Готовим словарь
Добавляем новый словарь /admin/content/taxonomy/add/vocabulary
Заполняем данные
Галки для привязки с типу материала не ставим!
Ставим галку “обязательно” и жмём “сохранить”.
Убедились, что словарь создан
Добавляем данные
Как я говорил выше, что словарь будет в формате отдел->сотрудник, давайте научимся это делать!
Жмём добавить термины. (в данном случае я не пишу ссылку, так как не совпадут идентификаторы словарей)
Сначала сформируем структуру нашей компании, а потом будем наполнять её сотрудниками.
Через форму “добавить термин” просто забиваем список отделов
Заполняем пока просто “название термина” остальное не трогаем.
Получится примерно такая картина
Мы подготовили список отделов.
Через эту же форму добавляем сотрудников, но тут уже раскрываем “дополнительные настройки” и выбираем родительский термин, для формирования иерархии
В итоге, у нас должен получиться список сотрудников, разбросанных по отделам.
Словарь готов. Настроим его.
Жмём уже “изменить словарь”
Нас пока интересует только настройка множественного выбора (в проекте ведь может участвовать несколько сотрудников)
Словарь настроен.
Создадим тип материала
Топаем в /admin/content/types/add
Заполняем поля
Сохраняем.
Добавляем поле /admin/content/node-type/project/fields
Сохраняем и настраиваем добавленное поле (нас туда перекинет после сохранения)
Нам надо указать, из какого словаря брать данные и отметить, что обязательно заполнение
Сохраняем.
Идём в /node/add/project и наслаждаемся
БИНГО!
Спасибо за потраченное время. Жду помидоры.
Источник: http://drupal.ru/node/55488
Очередной пост из серии “чтобы не забыть” – хотя, вполне возможно, кому-то еще пригодится.
Делая сайт на нескольких языках, столкнулись с проблемой – если выставить в настройках сайта отображение на главной конкретной ноды, она отображается только на одном языке (установленном по умолчанию). При переключении на другой язык получаем сообщение “Страница не найдена”.
Решение, как часто бывает, нашлось на drupal.org
Итак, чтобы иметь возможность указать адрес страницы, отображаемой в качестве главной, для каждого языка, нужно в settings.php добавить следующие строки:
<?php
$conf['i18n_variables'] = array(
'menu_primary_links_source',
'menu_secondary_links_source',
'site_frontpage'
);
?>
В этом примере можно еще указать раздельные меню (primary и secondary links) для разных языков.
После этого заходим на страницу /admin/settings/site-information, выставляем там значения по умолчанию. Переключаемся на другой язык, выставляем эти значения для этого языка, и т.д.
Вот список некоторых других переменных, для которых можно задать различные значения в зависимости от языка:
<?php
$conf['i18n_variables'] = array(
// Site name, slogan, mission, etc..
'site_name',
'site_slogan',
'site_mission',
'site_footer',
'anonymous',
// Node help
'blog_help',
'story_help',
// User configuration
'user_registration_help',
'user_mail_welcome_subject',
'user_mail_welcome_body',
'user_mail_approval_subject',
'user_mail_approval_body',
'user_mail_pass_subject',
'user_mail_pass_body',
// Different front page for eah language
'site_frontpage',
// Primary and secondary links
'menu_primary_links_source',
'menu_secondary_links_source',
// Contact form information
'contact_form_information',
// For theme variables, read more below
'theme_settings',
'theme_garland_settings',
'theme_zen_settings',
);
?>
Источник: http://drupal.ru/node/55483
Теоретически я всегда знал, что лучше использовать популярную CMS, чем какой либо непонятный “самопис”… Но я не предполагал, что есть умники, которые пытаются выдать более менее нормальную цмс за свое поделие, при этом изуродовав исходники…
Небольшой сказ о том, как перевести сайт на правильную систему управления (не забываем на каком ресурсе находимся )
Порядок действий
Анализ существующего сайта
На это этапе необходимо выявить существующие недостатки сайта и способы их устранения. Вполне может получится так, что переводить его на другой движок смысла не будет, но проще доработать имеющееся. Стоит так же обратить внимание на посещаемость сайта и источники пользователей, а так же наличие внешних работающих ссылок. Если их количество достаточно большое, продумайте как сохранить адреса (лучше не просто редирект сделать, но оставить УРЛы старыми). Определите технические недостатки: верстка, скорость работы, наличие мета-тегов и тд.
Определение способов решений
И вот Вы определились, что старый движок не справляется с задачами проекта, и нужно его менять. Не буду заострять внимание, почему именно выбран Drupal, холиваров на эту тему хватает. Под “способами решений” я подразумеваю набор используемых модулей. Рекомендую включать модули, имеющие хорошую поддержку и высокую статистику, находящиеся в стабильном состоянии, а главное удовлетворяющие (а может даже и с заделом на будущее) текущим требованиям проекта.
Перед реализацией…
Еще раз оглянитесь назад и убедитесь, что ранее все сделали правильно. Все ок? Продолжаем.
Перед тем, как начать, сделайте набросок микрозадач, шагов на пути выполнения данной работы. С этого момента, по сути, идет разработка нового сайта, но с учетом недостатков предыдущего и, так как выбран drupal, заделом на светлое будущее.
Реализация задуманного
Эта тема совсем отдельного поста, так как здесь уже идет речь о разработке.
Так как статья все таки о Друпале, и полезна будет новичкам (что бы не бросались в бой раньше времени), привожу ссылку на очень хорошее руководство http://drupal.ru/quickstart
Практический пример
Не спроста мысли вышеизложенные в голову пришли, пришлось подобное делать.
Попал в руки недавно сайт, который нужно администрировать, наполнять и продвигать.
Разработчик сделал его на wordpresse и попытался удалить все воспоминания об используемой CMS. В итоге остались какие-то файлы со скриптами и оформление, а страницы он сделал вручную (сайт маленький, порядка 15 страниц на тот момент). В общем, я принял решение убить старое поделие, и обустроится на перспективной, стратегически верной платформе.
Коротко (до – после):
URL созданы вручную – ЧПУ, создаются автоматом;
Отсутствие мета-тегов – Все на месте: заголовки, описания, ключевые слова;
Некликабельный логотип – Логотип и название компании ведут на главную;
Мелкие недочеты в оформлении – Исправлены нечитаемые шрифты4
Не адаптирован под разрешение 1024х768 – Поддерживаются разрешения мониторов 1024×768 и более;
Табличная верстка – Блочная верстка;
(новое) Добавлены дополнительные меню (строчка вверху и блок внизу) для повышения удобства, перелинковки;
(новое) Добавлены “хлебные крошки”.
Ежели интересно кому, какие задействованы модули:
Редактирование материалов: CKeditor+IMCE;
Создание фотогалереи: CCK+ImageField+ImageCach+ThickBox;
Навигация по сайту: DHTML menu, Breadcrumbs menu;
Категоризация материалов: Taxonomy, Tagadelic;
Поисковое продвижение: Nodewords, Page title, Pathauto, Global Redirect.
Настройку и пошаговое руководство не вижу смысла приводить – это для каждого проекта эти действия уникальны.
Живой результат работы в сети: http://svelto.info
Конструктивная критика приветствуется.
Attached poll “Приходилось ли Вам и как часто переделывать чужую работу? Поделитесь своим опытом, коллеги”.
Register or login to poll
Results:
Да, очень часто приходится: 5 голосов
Да, бывает, но очень редко: 2 голоса
Нет: 0 голосов
Источник: http://drupal.ru/node/54871
Всем привет! Данная статья не для профессионалов, которые уже всё знают , а для новичков. Уверен, многим пригодится на ниве раскрутки и оптимизации сайта на движке Drupal.
Материал представляет собой вольный перевод статьи “A List of the Best Drupal SEO & Social Media Modules”, достопочтенного Джейсона, http://www.themesnap.com/blogs/jason
Полный перевод с ссылками на модули представлен на сайте SEO программы со скидками
Список лучших SEO и социальных модулей для Drupal
SEO DRUPAL
Вы найдете много подборок и списков лучших Drupal SEO модулей, если воспользуетесь поиском Google или Яндекс.Однако многие из этих списков не включают модули, которые используются для повышения внутренней значимости страницы, эффективности и даже отслеживания за произведенными пользователем действиями.В списке ниже мы опишем несколько SEO Drupal модулей, которые используются, не только для повышения места вашего сайта в поисковых системах, но и для ваших драгоценных пользователей.Мы также включили большой перечень социальных модулей SMO, чтобы “оживить” ваш сайт на Drupal.Поехали!
Наиболее распространенные модули Drupal SEO
1. Page Title Module – заголовок страницы можно найти в начале HTML кода внутри тега .Он также используется в поисковой выдаче (SERP) и может значительно повысить ваши сайты в SEO. Это, пожалуй, наиболее малоиспользуемый аспект при создании веб-страницы, как вебмастер не добавляет ценные ключевые слова для тега .
2. Nodewords - Эти SEO модули позволяют добавлять мета-теги для Drupal страниц, как вручную, так и автоматически в зависимости от различных параметров.Обратите внимание на мета-теги, такие как ключевые слова, описание и канонические URL, они могут помочь получить лучшее позиционирование в поисковой системе.
3. Nodewords Page Title – Этот модуль позволяет использовать возможности Nodewords в пользовательских страницах для установки заголовка страницы с использованием подстановочных путей и глобальных маркеров (Тoken).Отлично подходит для труднообрабатываемых названий страниц в модулях Views, Panels, и других не-узловых (non-node) путях.Этот модуль сочетает лучшие черты Nodewords и page_title модулей.
4. Related Content – это отличный SEO модуль позволяет разработчикам сайта легко выбрать для каждого узла основу, которая определит – какие узлы должны быть показаны вместе с этим узлом.Узлы, которые доступны для выбора имеют один или несколько видов, предоставляемых Views модулем.Как узлы отображаются настраивается, а также темизируется.Модуль также обеспечивает небольшой, но мощный API для продвинутых пользователей.
5. Pathauto - модуль Pathauto автоматически генерирует псевдонимы путей (дружественные поисковой системе URL) для различных видов контента (узлов, категорий, пользователей), не требуя от пользователя вручную указывать путь псевдонима.Это позволяет получить псевдонимы вроде /category/my-node-title.html вместо / node/123.Псевдонимы основаны на “паттернах” системы, которые Администратор может контролировать.
6. Sitemap - Этот модуль предоставляет карту сайта, которая дает посетителям краткий обзор вашего сайта.Он также может отображать RSS-каналы для всех блогов и категорий.Drupal генерирует RSS-каналы автоматически, но немногие, кажется, знают, что такое существует. Карта может показывать следующие пункты: сообщение, которое будет отображаться вверху карты, последние блоги, любые книги, любые меню, которые будут показываться полностью развернутыми, любые категории, т.е. словари, со всеми развернуыми терминами.При желании с количеством узлов и RSS-каналами.
7. Path Redirect – Этот модуль позволяет вам указать перенаправление с одного пути на другой путь или внешний URL, используя любой статус HTTP перенаправления .Это перенаправление модуля является большим для переадресации 301, 302 (временного перенаправления), и несколько других типов перенаправления, когда вы, возможно, потребуется удалить или переместить страницы вашего сайта Drupal.
8. Google Analytics Module – Добавляет веб-статистику Google Аналитикс систему слежения на ваш сайт.Этот модуль позволяет добавлять богатые возможности статистики Google на ваш сайт Drupal.
9. XML Sitemap – карты сайта Модуль XML создает карту сайта, что соответствует sitemaps.org спецификации .Это помогает поисковым системам более грамотно сканировать веб-сайт и хранить свои результаты в актуальном состоянии.Карта сайта созданная этим модулем может быть автоматически передана Ask, Google, Bing (ранее Windows Live Search) и Yahoo! поисковым системам.Модуль также поставляется с несколькими подмодулями, которые могут добавить карте сайта ссылки на содержание, пункты меню, термины таксономии, и профили пользователей.
Другие полезные модули Drupal SEO
Указанные выше SEO модули, безусловно, рекомендуются, если вы желаете получить максимальную оптимизацию из вашего Drupal сайта.Однако, есть много других SEO и контент модулей, которые могут реально улучшить ваш сайт на движке Drupal.Некоторые из них перечислены ниже.
1. Content Optimizer – Этот модуль позволяет быстро проанализировать сайт на предмет SEO, обеспечить мгновенный анализ контента на сайте, как краткое и доступное руководство для обеспечения лучших SEO методов и последовательности действий.Анализ показывает актуальную статистику контента и рекомендации для того, чтобы улучшить ранжирование поисковой системы.
2. Glossify Internal Links Auto SEO – Что он делает для SEO?Этот модуль автоматически генерирует внутренние ссылки узла (ноды) и на каждом узле базу внешних ссылок (перекрёстные ссылки) – идеально подходит для SEO оптимизации страниц вашего сайта и страниц партнеров.В настоящее время модуль основан на узле (ноде) и ищет названия узла (ноды) в теле узла и делает ссылками. В общем, поставьте и поймете. Есть планы распространить его действие на термины таксономии тоже.
3. Scribe SEO – Scribe SEO является программным обеспечением поисковой оптимизации для Drupal и других платформ CMS – представьте себе этот модуль как помощника оптимизации контента, который анализирует веб-страницы, сообщения в блогах, и интернет-пресс-релизы по одному нажатию кнопки.Затем Scribe SEO говорит веб-мастерам, как настроить их контент, чтобы получить больше трафика с поисковых систем, при сохранении качества содержания текстов для читателя.
4. SEO Watcher – SEO Watcher модуль, который ищет ключевые слова с основных поисковых системах, проверяет ранг вашего сайта и конкурентоспособные сайты раз в день и затем создает отчеты.
5. QA Checklist – Этот модуль дает перечень лучших методов для гарантии качества сайта на Drupal.Он предоставляет список, который поможет вам отслеживать, какие задачи необходимо сделать.Во-первых, вы увидите, какие модули вы уже установили.Тогда все что вам нужно сделать, это пролистать вниз списка не отмеченных элементов и отметить их.
6. SEO Friend – SEO Friend показывает обзор всех имеющихся отчетов и список SEO-связанных модулей Drupal и, если они были установлены и включены, например, Meta Tags (узлов), Meta Тагс (путь), Page Title отчет, и Referrer Report – показывает резюме ссылающихся на Ваш сайт.
7. Related Block – Это поиск узлов, которые тесно связаны с названием и содержанием текущего узла.Блок показывается только на конкретных типах узлов.Слова в заголовке имееют более сильный приоритет, чем те, что в содержании.Отбираются часто используемые слова (пока только для английского языка), и игнорирует слова до 3-х символов.
8. Similar by Terms - Этот Drupal модуль обеспечивает контекстную связь для элементов контента, показывая блок со ссылками на другие, похожие по содержанию статьи.Сходство на основе терминов таксономии привязанных к содержимому.Блоки доступны по сходству в рамках каждого из определенных словарей на сайте, а также, имеется блок для сходства во всех словарях.
Источник: http://www.drupal.ru/node/54791
Всем привет! Данная статья не для профессионалов, которые уже всё знают , а для новичков. Уверен, многим пригодится на ниве раскрутки и оптимизации сайта на движке Drupal.
Материал представляет собой вольный перевод статьи “A List of the Best Drupal SEO & Social Media Modules”, достопочтенного Джейсона, http://www.themesnap.com/blogs/jason
Полный перевод с ссылками на модули представлен на сайте SEO программы со скидками
Список лучших SEO и социальных модулей для Drupal
SEO DRUPAL
Вы найдете много подборок и списков лучших Drupal SEO модулей, если воспользуетесь поиском Google или Яндекс.Однако многие из этих списков не включают модули, которые используются для повышения внутренней значимости страницы, эффективности и даже отслеживания за произведенными пользователем действиями.В списке ниже мы опишем несколько SEO Drupal модулей, которые используются, не только для повышения места вашего сайта в поисковых системах, но и для ваших драгоценных пользователей.Мы также включили большой перечень социальных модулей SMO, чтобы “оживить” ваш сайт на Drupal.Поехали!
Наиболее распространенные модули Drupal SEO
1. Page Title Module – заголовок страницы можно найти в начале HTML кода внутри тега .Он также используется в поисковой выдаче (SERP) и может значительно повысить ваши сайты в SEO. Это, пожалуй, наиболее малоиспользуемый аспект при создании веб-страницы, как вебмастер не добавляет ценные ключевые слова для тега .
2. Nodewords - Эти SEO модули позволяют добавлять мета-теги для Drupal страниц, как вручную, так и автоматически в зависимости от различных параметров.Обратите внимание на мета-теги, такие как ключевые слова, описание и канонические URL, они могут помочь получить лучшее позиционирование в поисковой системе.
3. Nodewords Page Title – Этот модуль позволяет использовать возможности Nodewords в пользовательских страницах для установки заголовка страницы с использованием подстановочных путей и глобальных маркеров (Тoken).Отлично подходит для труднообрабатываемых названий страниц в модулях Views, Panels, и других не-узловых (non-node) путях.Этот модуль сочетает лучшие черты Nodewords и page_title модулей.
4. Related Content – это отличный SEO модуль позволяет разработчикам сайта легко выбрать для каждого узла основу, которая определит – какие узлы должны быть показаны вместе с этим узлом.Узлы, которые доступны для выбора имеют один или несколько видов, предоставляемых Views модулем.Как узлы отображаются настраивается, а также темизируется.Модуль также обеспечивает небольшой, но мощный API для продвинутых пользователей.
5. Pathauto - модуль Pathauto автоматически генерирует псевдонимы путей (дружественные поисковой системе URL) для различных видов контента (узлов, категорий, пользователей), не требуя от пользователя вручную указывать путь псевдонима.Это позволяет получить псевдонимы вроде /category/my-node-title.html вместо / node/123.Псевдонимы основаны на “паттернах” системы, которые Администратор может контролировать.
6. Sitemap - Этот модуль предоставляет карту сайта, которая дает посетителям краткий обзор вашего сайта.Он также может отображать RSS-каналы для всех блогов и категорий.Drupal генерирует RSS-каналы автоматически, но немногие, кажется, знают, что такое существует. Карта может показывать следующие пункты: сообщение, которое будет отображаться вверху карты, последние блоги, любые книги, любые меню, которые будут показываться полностью развернутыми, любые категории, т.е. словари, со всеми развернуыми терминами.При желании с количеством узлов и RSS-каналами.
7. Path Redirect – Этот модуль позволяет вам указать перенаправление с одного пути на другой путь или внешний URL, используя любой статус HTTP перенаправления .Это перенаправление модуля является большим для переадресации 301, 302 (временного перенаправления), и несколько других типов перенаправления, когда вы, возможно, потребуется удалить или переместить страницы вашего сайта Drupal.
8. Google Analytics Module – Добавляет веб-статистику Google Аналитикс систему слежения на ваш сайт.Этот модуль позволяет добавлять богатые возможности статистики Google на ваш сайт Drupal.
9. XML Sitemap – карты сайта Модуль XML создает карту сайта, что соответствует sitemaps.org спецификации .Это помогает поисковым системам более грамотно сканировать веб-сайт и хранить свои результаты в актуальном состоянии.Карта сайта созданная этим модулем может быть автоматически передана Ask, Google, Bing (ранее Windows Live Search) и Yahoo! поисковым системам.Модуль также поставляется с несколькими подмодулями, которые могут добавить карте сайта ссылки на содержание, пункты меню, термины таксономии, и профили пользователей.
Другие полезные модули Drupal SEO
Указанные выше SEO модули, безусловно, рекомендуются, если вы желаете получить максимальную оптимизацию из вашего Drupal сайта.Однако, есть много других SEO и контент модулей, которые могут реально улучшить ваш сайт на движке Drupal.Некоторые из них перечислены ниже.
1. Content Optimizer – Этот модуль позволяет быстро проанализировать сайт на предмет SEO, обеспечить мгновенный анализ контента на сайте, как краткое и доступное руководство для обеспечения лучших SEO методов и последовательности действий.Анализ показывает актуальную статистику контента и рекомендации для того, чтобы улучшить ранжирование поисковой системы.
2. Glossify Internal Links Auto SEO – Что он делает для SEO?Этот модуль автоматически генерирует внутренние ссылки узла (ноды) и на каждом узле базу внешних ссылок (перекрёстные ссылки) – идеально подходит для SEO оптимизации страниц вашего сайта и страниц партнеров.В настоящее время модуль основан на узле (ноде) и ищет названия узла (ноды) в теле узла и делает ссылками. В общем, поставьте и поймете. Есть планы распространить его действие на термины таксономии тоже.
3. Scribe SEO – Scribe SEO является программным обеспечением поисковой оптимизации для Drupal и других платформ CMS – представьте себе этот модуль как помощника оптимизации контента, который анализирует веб-страницы, сообщения в блогах, и интернет-пресс-релизы по одному нажатию кнопки.Затем Scribe SEO говорит веб-мастерам, как настроить их контент, чтобы получить больше трафика с поисковых систем, при сохранении качества содержания текстов для читателя.
4. SEO Watcher – SEO Watcher модуль, который ищет ключевые слова с основных поисковых системах, проверяет ранг вашего сайта и конкурентоспособные сайты раз в день и затем создает отчеты.
5. QA Checklist – Этот модуль дает перечень лучших методов для гарантии качества сайта на Drupal.Он предоставляет список, который поможет вам отслеживать, какие задачи необходимо сделать.Во-первых, вы увидите, какие модули вы уже установили.Тогда все что вам нужно сделать, это пролистать вниз списка не отмеченных элементов и отметить их.
6. SEO Friend – SEO Friend показывает обзор всех имеющихся отчетов и список SEO-связанных модулей Drupal и, если они были установлены и включены, например, Meta Tags (узлов), Meta Тагс (путь), Page Title отчет, и Referrer Report – показывает резюме ссылающихся на Ваш сайт.
7. Related Block – Это поиск узлов, которые тесно связаны с названием и содержанием текущего узла.Блок показывается только на конкретных типах узлов.Слова в заголовке имееют более сильный приоритет, чем те, что в содержании.Отбираются часто используемые слова (пока только для английского языка), и игнорирует слова до 3-х символов.
8. Similar by Terms - Этот Drupal модуль обеспечивает контекстную связь для элементов контента, показывая блок со ссылками на другие, похожие по содержанию статьи.Сходство на основе терминов таксономии привязанных к содержимому.Блоки доступны по сходству в рамках каждого из определенных словарей на сайте, а также, имеется блок для сходства во всех словарях.
Источник: http://drupal.ru/node/54791
Поздравляю товарищи!
Пятничный подарок Готовая новая тема для Drupal! Называется “Silver“. В скором времени она появится на drupal.org, а у вас есть возможность попробовать первыми
Дизайн строгий, классический.
Посмотреть пример: Посмотреть
Скачать можно с этого топика или здесь
Вопросы можно отправлять на: itnextos сабака gmail.com
Отзывы и предложения приветствуются!
Прикрепленный файл
Размер
silver01.zip
55.93 кб
Источник: http://www.drupal.ru/node/54409
Поздравляю товарищи!
Пятничный подарок Готовая новая тема для Drupal! Называется “Silver“. В скором времени она появится на drupal.org, а у вас есть возможность попробовать первыми
Дизайн строгий, классический.
Посмотреть пример: Посмотреть
Скачать можно с этого топика или здесь
Вопросы можно отправлять на: itnextos сабака gmail.com
Отзывы и предложения приветствуются!
Прикрепленный файл
Размер
silver01.zip
55.93 кб
Источник: http://drupal.ru/node/54409
Вышло обновление для 6-ой ветки — Drupal 6.20. Поправлены разные мелкие баги, исправлений безопасности в этом релизе нет.
В этом релизе внесены изменения в robots.txt — http://drupal.org/node/494462
Подробности на английском: http://drupal.org/drupal-6.20
Скачать: http://ftp.drupal.org/files/projects/drupal-6.20.tar.gz
Источник: http://www.drupal.ru/drupal-6.20
Вышло обновление для 6-ой ветки — Drupal 6.20. Поправлены разные мелкие баги, исправлений безопасности в этом релизе нет.
В этом релизе внесены изменения в robots.txt — http://drupal.org/node/494462
Подробности на английском: http://drupal.org/drupal-6.20
Скачать: http://ftp.drupal.org/files/projects/drupal-6.20.tar.gz
Источник: http://drupal.ru/drupal-6.20
Здравствуйте!
Напишу сюда результат анализа лога mysql за примерно пол-месяца работы сайта на друпале.
О том, как нехорошо кешировать данные в mysql, я уже писал. Там рассматривалась работа CacheRouter при выборе хранилища в БД – то есть стандартное кеширование друпала.
Теперь был проведен анализ после перевода кеша в memcache.
Вот некоторая статистика:
#memcached-tool localhost stats
bytes_read 1593512968640 = 1.5 Терабайта
bytes_written 5899978353864 = почти 6 Терабайт
mysql:
Трафик ø в час
Принято 81 ГБ 217 МБ
Отправлено 464 ГБ 1,234 МБ
Всего 545 ГБ 1,451 МБ
Анализ бинарного лога
Вот список запросов, которые изменяют информацию:
1. CAPTCHA – стоит графическая, при вводе комментариев: 36% запросов
Модуль: CAPTCHA
Число запросов: 696.77k (12.12%)
Запрос: UPDATE captcha_sessions SET token='S' WHERE csid=N
Модуль: CAPTCHA
Число запросов: 696.11k (12.11%)
Запрос: UPDATE captcha_sessions SET timestamp=N, solution='S' WHERE csid=N
Модуль: CAPTCHA
Число запросов: 695.75k (12.10%)
Запрос: INSERT INTO captcha_sessions (uid, sid, ip_address, timestamp, form_id, solution, STATUS, attempts) VALUES (N, 'S', 'S', N, 'S', 'S', N, N)
2. Стандартный модуль статистики, считает количество посещений ноды: 28% запросов
Модуль: Statistics
Число запросов: 1.60M (27.84%)
Запрос: UPDATE node_counter SET daycount = daycount + 1, totalcount = totalcount + 1, timestamp = N WHERE nid = N
3. Ядро (сессии) – записывает и обновляет сессии: 18% запросов
Модуль: Core
Число запросов: 835.58k (14.53%)
Запрос: UPDATE sessions SET uid = N, cache = N, hostname = 'S', session = 'S', timestamp = N WHERE sid = 'S'
Модуль: Core
Число запросов: 213.20k (3.71%)
Запрос: INSERT INTO sessions (sid, uid, cache, hostname, session, timestamp) VALUES ('S', N, N, 'S', 'S', N)
4. Database logging (core) – записывает события в базу данных: 10% запросов
Модуль: Database logging
Число запросов: 597.70k (10.39%)
Запрос: INSERT INTO watchdog (uid, type, message, VARIABLES, severity, link, location, referer, hostname, timestamp) VALUES (N, 'S', 'S', 'S', N, 'S', 'S', 'S', 'S', N)
Модуль:
Число запросов:
Запрос:
Итого, 4 модуля делают 36% + 28% + 18% + 10% = 92% !!! запросов на изменение информации
Что может быть предложено:
1. Капча – сейчас она показывается всем, кто смотрит ноду, т.к. стоит модуль ajax_comments и комментарии вместе с формой расположены на той же странице. Т.к. оставляет комментарии намного меньше людей, чем те, кто смотрят ноду, то если форму для комментариев разместить на отдельной странице – нагрузка снизится почти до нуля.
Либо альтернативный вариант помещать ее каким-то образом в кеш – такое возможно?
2. Модуль статистики – вещь полезная, например, для определения популярного контента за сегодня / за все время по числу просмотров. Сейчас ВСЯ таблица node_counter у меня весит 5-6 мегабайт!!! есть ли какой-то способ (модуль), чтобы поместить эту таблицу также в кеш, и, допустим, сбрасывать в mysql по крону? При таком подходе нагрузка также станет 0.
Также было замечено, что daycount имеет некорректное значение – по моему представлению, если я запускаю крон раз в час, то обновление должно происходить например в 00:00, когда вызывается крон – там же реализовано обновление через переменную, это неправильно, поскольку вначале переменная не установлена в 00:00, а потом, т.к. крон запускается в одно и то же время, statistics_day_timestamp может “убежать” на 1 сек, и следующий запрос уже будет выполнен в 01:00
<?phpstatistics.module , строка 179
function statistics_cron() {
$statistics_timestamp = variable_get('statistics_day_timestamp', '');
if ((time() - $statistics_timestamp) >= 86400) {
// Reset day counts.
db_query('UPDATE {node_counter} SET daycount = 0');
variable_set('statistics_day_timestamp', time());
}
}
?>
3. Сессии – я уменьшил время сессии в default.settings.php с 23 дней до 5 дней, сейчас размер этой таблицы 10-15 мегабайт. Хотелось бы также ее в кеш.
4. Лог – как изменится производительность системы, если весь лог отправлять в syslog? По идее, любая серверная программа отправляет в syslog – web сервер, mysql, почта и т.д. и тормозами от этого не страдает – думаю, надо настроить src и destination для друпала, пусть складывается все туда.
Итого: при выполнении этих действий нагрузка на сервер mysql по части изменений (update, insert) снизится более, чем в 10 раз!!!
Анализ медленных (или использующих много строк) запросов
Также был проанализирован slow_query.log на предмет отлавливания нехороших запросов.
Предпосылкой к этому стали следующие данные:
Количество запросов, на чтение строки, основанных на ее позиции. Большое значение переменной может быть обусловлено частым выполнением запросов использующих сортировку результата, выполнением большого числа запросов требующих полного сканирования таблиц, наличием объединений не использующих индексы надлежащим образом.
Handler_read_rnd 150 M
Количество запросов на чтение следующей строки из файла данных. Данное значение будет высоким, при частом сканировании таблиц. Обычно это означает, что таблицы не проиндексированы надлежащим образом или запросы не используют преимущества индексов.
Handler_read_rnd_next 1,976 M
Количество временных таблиц, автоматически созданных сервером на диске, во время выполнения SQL-выражений. Если значение Created_tmp_disk_tables велико, следует увеличить значение переменной tmp_table_size, чтобы временные таблицы располагались в памяти, а не на жестком диске.
Created_tmp_disk_tables 2,458 k
Количество запросов-объединений, выполненных без использования индексов. Если значение переменной не равно 0, рекомендуется проверить индексы таблиц.
Select_full_join 8,620
Количество проходов, сделанных алгоритмом сортировки. При большом значении следует увеличить значение переменной sort_buffer_size.
Sort_merge_passes 502
А также
Количество запросов, добавленных в кеш запросов.
Qcache_inserts 33 M
Количество запросов, удаленных из кеша для освобождения памяти под кеширование новых запросов. Эта информация может помочь при настройке размера кеша запросов. Кеш запросов использует стратегию LRU (дольше всего не использующиеся страницы заменяются новыми) при принятии решения об удаления запроса из кеша.
Qcache_lowmem_prunes 20 M
Очевидно, что делается скан таблиц с большим количеством строк
Вот анализ:
1. views – материал: новость, опубликован, рубрика = 10, 3 последних
Количество запросов: 14199 (3 последних) + 1485 (10 последних) + 268 (4 последних) + 153 (20 последних – таксономия)
Общее время: 16760 + 1906 + 227 + 185 = 19078 секунд, в среднем: 1.18 / 1.28 / 0.84 / 1.21
Количество строк: 13674 – 126552 /
SET timestamp=1292480648;
SELECT node.nid AS nid,
node.created AS node_created,
node.title AS node_title
FROM node node
INNER JOIN term_node term_node ON node.vid = term_node.vid
WHERE (node.type IN ('news')) AND (node.STATUS <> 0) AND (term_node.tid = 10)
ORDER BY node_created DESC
LIMIT 0, 3;
2. Облако тегов по словарю, модуль tagadelic
Количество запросов: 1053
Общее время: 936, в среднем: 0.89
Количество строк: 15154 – 15326
Запрос:
SELECT COUNT(*) AS count, td.tid, td.vid, td.name, td.description FROM term_data td INNER JOIN term_node tn ON td.tid = tn.tid INNER JOIN node n ON tn.vid = n.vid WHERE td.vid IN (5) GROUP BY td.tid, td.vid, td.name, td.description HAVING COUNT(*) > 0 ORDER BY count DESC LIMIT 0, 12;
3. xmlsitemap – я так понимаю, это запрос по крону на добавление новых нод в сайтмап – ПОЛНЫЙ СКАН
Количество запросов: 368
Общее время: 436, в среднем: 1.18
Количество строк: 171575 – 172750
Запрос:
SELECT n.nid FROM node n LEFT JOIN xmlsitemap x ON x.type = 'node' AND n.nid = x.id WHERE x.id IS NULL AND n.type IN ('news','reviews') ORDER BY n.nid DESC LIMIT 0, 100;
4. Снова xmlsitemap – выдача “подкарты” сайта – это даже хуже, чем полный скан
Количество запросов: 459
Общее время: 326, в среднем: 0.71
Количество строк: 134500 – 344905
Запрос:
SELECT x.loc, x.lastmod, x.changefreq, x.changecount, x.priority, x.LANGUAGE FROM xmlsitemap x WHERE x.access = 1 AND x.STATUS = 1 ORDER BY x.LANGUAGE, x.loc LIMIT 172500, 500;
5. url_alias – снова xmlsitemap ?
Количество запросов: 388
Общее время: 210, в среднем: 0.54
Количество строк: 171762 – 345745
Запрос:
SELECT src, dst FROM url_alias WHERE LANGUAGE = 'ru' ORDER BY pid;
Остальные запросы не такие затратные, или их мало.
Итого, самый “трудный” запрос является запрос views – материал: новость, опубликован, рубрика = 10, 3 последних – самая большая нагрузка – 19078 секунд – это больше 5 часов из 15 дней полной работы
Следующим запросом идет облако тегов по словарю – 936 секунд, а словарь еще до конца не заполнен.
И последние запросы относятся к xmlsitemap.
Получается, самые дорогие запросы делает модуль views при выборке из словаря с сортировкой по дате, модуль tagadelic при составлении облака тегов и xmlsitemap.
Самым “болезненным” запросом для моего сайта получается все-таки views, о том, что с ним можно сделать хотел бы услышать Ваши комментарии, с остальным вроде более-менее понятно, с tagadelic и xmlsitemap я пока готов смириться.
Источник: http://www.drupal.ru/node/54345
Здравствуйте!
Напишу сюда результат анализа лога mysql за примерно пол-месяца работы сайта на друпале.
О том, как нехорошо кешировать данные в mysql, я уже писал. Там рассматривалась работа CacheRouter при выборе хранилища в БД – то есть стандартное кеширование друпала.
Теперь был проведен анализ после перевода кеша в memcache.
Вот некоторая статистика:
#memcached-tool localhost stats
bytes_read 1593512968640 = 1.5 Терабайта
bytes_written 5899978353864 = почти 6 Терабайт
mysql:
Трафик ø в час
Принято 81 ГБ 217 МБ
Отправлено 464 ГБ 1,234 МБ
Всего 545 ГБ 1,451 МБ
Анализ бинарного лога
Вот список запросов, которые изменяют информацию:
1. CAPTCHA – стоит графическая, при вводе комментариев: 36% запросов
Модуль: CAPTCHA
Число запросов: 696.77k (12.12%)
Запрос: UPDATE captcha_sessions SET token='S' WHERE csid=N
Модуль: CAPTCHA
Число запросов: 696.11k (12.11%)
Запрос: UPDATE captcha_sessions SET timestamp=N, solution='S' WHERE csid=N
Модуль: CAPTCHA
Число запросов: 695.75k (12.10%)
Запрос: INSERT INTO captcha_sessions (uid, sid, ip_address, timestamp, form_id, solution, STATUS, attempts) VALUES (N, 'S', 'S', N, 'S', 'S', N, N)
2. Стандартный модуль статистики, считает количество посещений ноды: 28% запросов
Модуль: Statistics
Число запросов: 1.60M (27.84%)
Запрос: UPDATE node_counter SET daycount = daycount + 1, totalcount = totalcount + 1, timestamp = N WHERE nid = N
3. Ядро (сессии) – записывает и обновляет сессии: 18% запросов
Модуль: Core
Число запросов: 835.58k (14.53%)
Запрос: UPDATE sessions SET uid = N, cache = N, hostname = 'S', session = 'S', timestamp = N WHERE sid = 'S'
Модуль: Core
Число запросов: 213.20k (3.71%)
Запрос: INSERT INTO sessions (sid, uid, cache, hostname, session, timestamp) VALUES ('S', N, N, 'S', 'S', N)
4. Database logging (core) – записывает события в базу данных: 10% запросов
Модуль: Database logging
Число запросов: 597.70k (10.39%)
Запрос: INSERT INTO watchdog (uid, type, message, VARIABLES, severity, link, location, referer, hostname, timestamp) VALUES (N, 'S', 'S', 'S', N, 'S', 'S', 'S', 'S', N)
Модуль:
Число запросов:
Запрос:
Итого, 4 модуля делают 36% + 28% + 18% + 10% = 92% !!! запросов на изменение информации
Что может быть предложено:
1. Капча – сейчас она показывается всем, кто смотрит ноду, т.к. стоит модуль ajax_comments и комментарии вместе с формой расположены на той же странице. Т.к. оставляет комментарии намного меньше людей, чем те, кто смотрят ноду, то если форму для комментариев разместить на отдельной странице – нагрузка снизится почти до нуля.
Либо альтернативный вариант помещать ее каким-то образом в кеш – такое возможно?
2. Модуль статистики – вещь полезная, например, для определения популярного контента за сегодня / за все время по числу просмотров. Сейчас ВСЯ таблица node_counter у меня весит 5-6 мегабайт!!! есть ли какой-то способ (модуль), чтобы поместить эту таблицу также в кеш, и, допустим, сбрасывать в mysql по крону? При таком подходе нагрузка также станет 0.
Также было замечено, что daycount имеет некорректное значение – по моему представлению, если я запускаю крон раз в час, то обновление должно происходить например в 00:00, когда вызывается крон – там же реализовано обновление через переменную, это неправильно, поскольку вначале переменная не установлена в 00:00, а потом, т.к. крон запускается в одно и то же время, statistics_day_timestamp может “убежать” на 1 сек, и следующий запрос уже будет выполнен в 01:00
<?phpstatistics.module , строка 179
function statistics_cron() {
$statistics_timestamp = variable_get('statistics_day_timestamp', '');
if ((time() - $statistics_timestamp) >= 86400) {
// Reset day counts.
db_query('UPDATE {node_counter} SET daycount = 0');
variable_set('statistics_day_timestamp', time());
}
}
?>
3. Сессии – я уменьшил время сессии в default.settings.php с 23 дней до 5 дней, сейчас размер этой таблицы 10-15 мегабайт. Хотелось бы также ее в кеш.
4. Лог – как изменится производительность системы, если весь лог отправлять в syslog? По идее, любая серверная программа отправляет в syslog – web сервер, mysql, почта и т.д. и тормозами от этого не страдает – думаю, надо настроить src и destination для друпала, пусть складывается все туда.
Итого: при выполнении этих действий нагрузка на сервер mysql по части изменений (update, insert) снизится более, чем в 10 раз!!!
Анализ медленных (или использующих много строк) запросов
Также был проанализирован slow_query.log на предмет отлавливания нехороших запросов.
Предпосылкой к этому стали следующие данные:
Количество запросов, на чтение строки, основанных на ее позиции. Большое значение переменной может быть обусловлено частым выполнением запросов использующих сортировку результата, выполнением большого числа запросов требующих полного сканирования таблиц, наличием объединений не использующих индексы надлежащим образом.
Handler_read_rnd 150 M
Количество запросов на чтение следующей строки из файла данных. Данное значение будет высоким, при частом сканировании таблиц. Обычно это означает, что таблицы не проиндексированы надлежащим образом или запросы не используют преимущества индексов.
Handler_read_rnd_next 1,976 M
Количество временных таблиц, автоматически созданных сервером на диске, во время выполнения SQL-выражений. Если значение Created_tmp_disk_tables велико, следует увеличить значение переменной tmp_table_size, чтобы временные таблицы располагались в памяти, а не на жестком диске.
Created_tmp_disk_tables 2,458 k
Количество запросов-объединений, выполненных без использования индексов. Если значение переменной не равно 0, рекомендуется проверить индексы таблиц.
Select_full_join 8,620
Количество проходов, сделанных алгоритмом сортировки. При большом значении следует увеличить значение переменной sort_buffer_size.
Sort_merge_passes 502
А также
Количество запросов, добавленных в кеш запросов.
Qcache_inserts 33 M
Количество запросов, удаленных из кеша для освобождения памяти под кеширование новых запросов. Эта информация может помочь при настройке размера кеша запросов. Кеш запросов использует стратегию LRU (дольше всего не использующиеся страницы заменяются новыми) при принятии решения об удаления запроса из кеша.
Qcache_lowmem_prunes 20 M
Очевидно, что делается скан таблиц с большим количеством строк
Вот анализ:
1. views – материал: новость, опубликован, рубрика = 10, 3 последних
Количество запросов: 14199 (3 последних) + 1485 (10 последних) + 268 (4 последних) + 153 (20 последних – таксономия)
Общее время: 16760 + 1906 + 227 + 185 = 19078 секунд, в среднем: 1.18 / 1.28 / 0.84 / 1.21
Количество строк: 13674 – 126552 /
SET timestamp=1292480648;
SELECT node.nid AS nid,
node.created AS node_created,
node.title AS node_title
FROM node node
INNER JOIN term_node term_node ON node.vid = term_node.vid
WHERE (node.type IN ('news')) AND (node.STATUS <> 0) AND (term_node.tid = 10)
ORDER BY node_created DESC
LIMIT 0, 3;
2. Облако тегов по словарю, модуль tagadelic
Количество запросов: 1053
Общее время: 936, в среднем: 0.89
Количество строк: 15154 – 15326
Запрос:
SELECT COUNT(*) AS count, td.tid, td.vid, td.name, td.description FROM term_data td INNER JOIN term_node tn ON td.tid = tn.tid INNER JOIN node n ON tn.vid = n.vid WHERE td.vid IN (5) GROUP BY td.tid, td.vid, td.name, td.description HAVING COUNT(*) > 0 ORDER BY count DESC LIMIT 0, 12;
3. xmlsitemap – я так понимаю, это запрос по крону на добавление новых нод в сайтмап – ПОЛНЫЙ СКАН
Количество запросов: 368
Общее время: 436, в среднем: 1.18
Количество строк: 171575 – 172750
Запрос:
SELECT n.nid FROM node n LEFT JOIN xmlsitemap x ON x.type = 'node' AND n.nid = x.id WHERE x.id IS NULL AND n.type IN ('news','reviews') ORDER BY n.nid DESC LIMIT 0, 100;
4. Снова xmlsitemap – выдача “подкарты” сайта – это даже хуже, чем полный скан
Количество запросов: 459
Общее время: 326, в среднем: 0.71
Количество строк: 134500 – 344905
Запрос:
SELECT x.loc, x.lastmod, x.changefreq, x.changecount, x.priority, x.LANGUAGE FROM xmlsitemap x WHERE x.access = 1 AND x.STATUS = 1 ORDER BY x.LANGUAGE, x.loc LIMIT 172500, 500;
5. url_alias – снова xmlsitemap ?
Количество запросов: 388
Общее время: 210, в среднем: 0.54
Количество строк: 171762 – 345745
Запрос:
SELECT src, dst FROM url_alias WHERE LANGUAGE = 'ru' ORDER BY pid;
Остальные запросы не такие затратные, или их мало.
Итого, самый “трудный” запрос является запрос views – материал: новость, опубликован, рубрика = 10, 3 последних – самая большая нагрузка – 19078 секунд – это больше 5 часов из 15 дней полной работы
Следующим запросом идет облако тегов по словарю – 936 секунд, а словарь еще до конца не заполнен.
И последние запросы относятся к xmlsitemap.
Получается, самые дорогие запросы делает модуль views при выборке из словаря с сортировкой по дате, модуль tagadelic при составлении облака тегов и xmlsitemap.
Самым “болезненным” запросом для моего сайта получается все-таки views, о том, что с ним можно сделать хотел бы услышать Ваши комментарии, с остальным вроде более-менее понятно, с tagadelic и xmlsitemap я пока готов смириться.
Источник: http://drupal.ru/node/54345
Рассмотрим кусок меню на обычном сайте.
Пока все стандартно. Теперь мы хотим, чтобы когда пользователь нажимает на меню Компания ему открывалась страница О компании.
Неправильное решение
Можно попытаться присвоить пункту Компания тот же самый адрес node/45. Пользователь делает клик на Компания .. И тут мы обнаруживаем интересную особенность Друпала. Из двух пунктов меню с одинаковыми адресами активным (class=”active”) Друпал сделает только один – первый по списку. Кроме того, если вы играетесь с модулем Custom Breadcrumbs – вы получите неверные хлебные крошки.
Дальше у нас есть выбор – сдаться и сделать для пункта меню Компания отдельную нормальную страницу. Либо включить хитрость и сделать страницу-редиректор которая бы перекидывала пользователя с Компания на О компании.
Как не надо делать
Начитавшись Drupal API у вас может возникнуть “гениальная” идея. Создаем новый тип материала, например, fake_page, делаем новую ноду этого типа и в ней пишем
<?php
drupal_goto('node/45');
?>
Плюсов у этого решения нет, одни недостатки:
Внезапно отваливается индексация поиска. И вообще весь крон. В watchdog вы увидите сообщение “Cron run exceeded the time limit and was aborted.”, хотя сам крон отрабатывается мгновенно. Через некоторое время (большое? вы обнаружите, что крон умирает именно в модуле search. И именно на ноде-редиректоре.
Человек, пришедший после вас, при попытка посмотреть содержимое fake_page будет попадать в другое место и долго удивляться что за фигня.
Правильное решение
Существует прекрасный модуль Path redirect, который в явном виде позволяет задать переадресацию с одного адреса на другой. А с помощью расово верного патча он позволяет делать переадресацию с уже существующего пути в любое другое место. Почему с уже существующего? Потому что Друпал не позволит создать пункт меню Компания с пустым адресом.
Теперь о том, где взять “уже существующий путь”. По прежнему мы можем создавать пустые ноды типа fake_page, делать им красивые алиасы и адреса этих нод указывать в качестве путей для меню. Но мне этот подход не нравится тем, что эти пустые ноды будут болтаться в списке контента.
Другой подход – следуя модному в стране тренду, сделать наномодуль . Который только тем и будет заниматься, что объявлять нужный нам адрес существующим. Далее пример такого модуля:
nanofake.info
name = Nanofake
description = Emulates fake addresses
core = 6.x
nanofake.module
<?php
function nanofake_menu() {
$items['fake1'] = array(
'page callback' => 'nanofake_none',
'access arguments' => array('access content'),
'type' => MENU_CALLBACK,
);
return $items;
}
function nanofake_none() {
return '';
}
Теперь для пункта меню мы можем указать fake1 в качестве path, а в path redirector сделать перенаправление с fake1 на node/45.
Все это конечно только мой опыт (вполне возможно это все велосипед) и если у кого-то есть опыт более позитивный – прошу в комментарии.
Прикрепленный файл
Размер
illustrate-1.png
6.44 кб
nanofake.zip
592 байта
Источник: http://www.drupal.ru/node/53508
Рассмотрим кусок меню на обычном сайте.
Пока все стандартно. Теперь мы хотим, чтобы когда пользователь нажимает на меню Компания ему открывалась страница О компании.
Неправильное решение
Можно попытаться присвоить пункту Компания тот же самый адрес node/45. Пользователь делает клик на Компания .. И тут мы обнаруживаем интересную особенность Друпала. Из двух пунктов меню с одинаковыми адресами активным (class=”active”) Друпал сделает только один – первый по списку. Кроме того, если вы играетесь с модулем Custom Breadcrumbs – вы получите неверные хлебные крошки.
Дальше у нас есть выбор – сдаться и сделать для пункта меню Компания отдельную нормальную страницу. Либо включить хитрость и сделать страницу-редиректор которая бы перекидывала пользователя с Компания на О компании.
Как не надо делать
Начитавшись Drupal API у вас может возникнуть “гениальная” идея. Создаем новый тип материала, например, fake_page, делаем новую ноду этого типа и в ней пишем
<?php
drupal_goto('node/45');
?>
Плюсов у этого решения нет, одни недостатки:
Внезапно отваливается индексация поиска. И вообще весь крон. В watchdog вы увидите сообщение “Cron run exceeded the time limit and was aborted.”, хотя сам крон отрабатывается мгновенно. Через некоторое время (большое? вы обнаружите, что крон умирает именно в модуле search. И именно на ноде-редиректоре.
Человек, пришедший после вас, при попытка посмотреть содержимое fake_page будет попадать в другое место и долго удивляться что за фигня.
Правильное решение
Существует прекрасный модуль Path redirect, который в явном виде позволяет задать переадресацию с одного адреса на другой. А с помощью расово верного патча он позволяет делать переадресацию с уже существующего пути в любое другое место. Почему с уже существующего? Потому что Друпал не позволит создать пункт меню Компания с пустым адресом.
Теперь о том, где взять “уже существующий путь”. По прежнему мы можем создавать пустые ноды типа fake_page, делать им красивые алиасы и адреса этих нод указывать в качестве путей для меню. Но мне этот подход не нравится тем, что эти пустые ноды будут болтаться в списке контента.
Другой подход – следуя модному в стране тренду, сделать наномодуль . Который только тем и будет заниматься, что объявлять нужный нам адрес существующим. Далее пример такого модуля:
nanofake.info
name = Nanofake
description = Emulates fake addresses
core = 6.x
nanofake.module
<?php
function nanofake_menu() {
$items['fake1'] = array(
'page callback' => 'nanofake_none',
'access arguments' => array('access content'),
'type' => MENU_CALLBACK,
);
return $items;
}
function nanofake_none() {
return '';
}
Теперь для пункта меню мы можем указать fake1 в качестве path, а в path redirector сделать перенаправление с fake1 на node/45.
Все это конечно только мой опыт (вполне возможно это все велосипед) и если у кого-то есть опыт более позитивный – прошу в комментарии.
Прикрепленный файл
Размер
illustrate-1.png
6.44 кб
nanofake.zip
592 байта
Источник: http://drupal.ru/node/53508
date_picker – Модуль привязки всплывающего календаря к любому CCK полю.
Для одного из проектов понадобилось прикрутить календарь к текстовому полю. Так как поле было сильно завязано на ряд модулей, было решено сделать обработчик вывода CCK поля. Препроцессинг вывода поля позаимствовал у CKeditor.
Исправленно определение локали
Добавлена поддержка текстовых полей
Добавлены зависимости модулей
Применяемые hooks:
content_field_edit_form – Функция препроцессора CCK поля
date_picker_content_fieldapi – Функция из API CCK ‘hook_content_fieldapi’
date_picker_elements – Функция для добавления действий с полем
Урл JS скрипта http://www.dynarch.com/projects/calendar/
Если у кого есть какие пожелания. пишите.
Настройки:
Внешний вид
Это пока глубокая альфа.
Прикрепленный файл
Размер
date_picker.rar
110.78 кб
Источник: http://www.drupal.ru/node/53481
date_picker – Модуль привязки всплывающего календаря к любому CCK полю.
Для одного из проектов понадобилось прикрутить календарь к текстовому полю. Так как поле было сильно завязано на ряд модулей, было решено сделать обработчик вывода CCK поля. Препроцессинг вывода поля позаимствовал у CKeditor.
Исправленно определение локали
Добавлена поддержка текстовых полей
Добавлены зависимости модулей
Применяемые hooks:
content_field_edit_form – Функция препроцессора CCK поля
date_picker_content_fieldapi – Функция из API CCK ‘hook_content_fieldapi’
date_picker_elements – Функция для добавления действий с полем
Урл JS скрипта http://www.dynarch.com/projects/calendar/
Если у кого есть какие пожелания. пишите.
Настройки:
Внешний вид
Это пока глубокая альфа.
Прикрепленный файл
Размер
date_picker.rar
110.78 кб
Источник: http://drupal.ru/node/53481
книга для тех, кто еще не набил шишек на Drupal 7. В основном обзор тем людям, кто знакомится с новой версией.
http://www.wowebook.com/open-source/foundation-drupal-7.html
более “вкусная”, на мой взгляд, книга, как раз то, о чем идет много споров: Views или не views. Хоть выпуск и февраль 2010г., но на глаза попалась только сейчас, а шарить в views для серьезного разработчика на Drupal, думаю объяснений не нужно.
PS К ярым противникам views это не относится))
Источник: http://www.drupal.ru/node/53397
книга для тех, кто еще не набил шишек на Drupal 7. В основном обзор тем людям, кто знакомится с новой версией.
http://www.wowebook.com/open-source/foundation-drupal-7.html
более “вкусная”, на мой взгляд, книга, как раз то, о чем идет много споров: Views или не views. Хоть выпуск и февраль 2010г., но на глаза попалась только сейчас, а шарить в views для серьезного разработчика на Drupal, думаю объяснений не нужно.
PS К ярым противникам views это не относится))
Источник: http://drupal.ru/node/53397
Есть замечательный модуль Ajax_comments от neochief, который позволяет открывать форму комментария непосредственно под комментарием (посредством AJAX). И есть статья этого-же (кстати многоуважаемого лично мной) автора про перенос формы ввода комментария непосредственно под сам пост, перед списком остальных сообщений – Модуль «Форма комментариев поверх комментов» и даже есть модуль который все это реализует – Comment form above comments. Но есть один нюанс – не дружат эти модули между собой (по крайней мере у меня не получилось их подружить напрямую).
Просматривая исходные коды данных модулей в надежде их все таки подружить, я заметил что в принципе метод предложенный neochief, а именно подменой темы на некотором этапе рендеринга, на свою не единственный (опять же гибкость Drupal в этом плане меня поражает).
Поэтому хочу предложить свой метод, основанный на хуке hook_menu_alter, ведь в принципе ни кто нам не запрещает полностью переопределить вывод ноды подменив стандартный коллбэк «node/%node».
Статья достаточно объемная, с исходными кодами поэтому кому интересно можно посмотреть здесь
Ajax_comments и форма комментариев выше комментариев, там же находиться и архив с модулем.
Основная идея данного модуля, подменить стандартный вывод через node_page_view своим, и в нем проверить как настроен вывод комментария у данного типа ноды, если это стандартный вывод COMMENT_FORM_SEPARATE_PAGE или COMMENT_FORM_BELOW то вызываем стандартный node_show, если же наш новый тип вывода COMMENT_FORM_ABOVE, то вызовем свой обработчик acomment_node_show.
В принципе ничего интересного в самом коде нет, все функции дублируют аналогичные функции из стандартных модулей node и comment, единственное отличие функции
acomment_comment_render от comment_render из модуля comment – это замена строки
<?php$output .= comment_form_box(array('nid' => $nid), t('Post new comment'));?>
на
<?php$output = comment_form_box(array('nid' => $nid), t('Post new comment')) . $output;?>
где мы собственно и переносим форму ввода комментария, сразу после ноды.
Пример реализации в ветке форума моего нового проекта Loros Studio
Источник: http://www.drupal.ru/node/53315
Есть замечательный модуль Ajax_comments от neochief, который позволяет открывать форму комментария непосредственно под комментарием (посредством AJAX). И есть статья этого-же (кстати многоуважаемого лично мной) автора про перенос формы ввода комментария непосредственно под сам пост, перед списком остальных сообщений – Модуль «Форма комментариев поверх комментов» и даже есть модуль который все это реализует – Comment form above comments. Но есть один нюанс – не дружат эти модули между собой (по крайней мере у меня не получилось их подружить напрямую).
Просматривая исходные коды данных модулей в надежде их все таки подружить, я заметил что в принципе метод предложенный neochief, а именно подменой темы на некотором этапе рендеринга, на свою не единственный (опять же гибкость Drupal в этом плане меня поражает).
Поэтому хочу предложить свой метод, основанный на хуке hook_menu_alter, ведь в принципе ни кто нам не запрещает полностью переопределить вывод ноды подменив стандартный коллбэк «node/%node».
Статья достаточно объемная, с исходными кодами поэтому кому интересно можно посмотреть здесь
Ajax_comments и форма комментариев выше комментариев, там же находиться и архив с модулем.
Основная идея данного модуля, подменить стандартный вывод через node_page_view своим, и в нем проверить как настроен вывод комментария у данного типа ноды, если это стандартный вывод COMMENT_FORM_SEPARATE_PAGE или COMMENT_FORM_BELOW то вызываем стандартный node_show, если же наш новый тип вывода COMMENT_FORM_ABOVE, то вызовем свой обработчик acomment_node_show.
В принципе ничего интересного в самом коде нет, все функции дублируют аналогичные функции из стандартных модулей node и comment, единственное отличие функции
acomment_comment_render от comment_render из модуля comment – это замена строки
<?php$output .= comment_form_box(array('nid' => $nid), t('Post new comment'));?>
на
<?php$output = comment_form_box(array('nid' => $nid), t('Post new comment')) . $output;?>
где мы собственно и переносим форму ввода комментария, сразу после ноды.
Пример реализации в ветке форума моего нового проекта Loros Studio
Источник: http://drupal.ru/node/53315