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

[РЕШЕНО] Помогите с докрутить sql-запрос к нескольким таблицам (drupal6 + ubercart)

13 октября 2013 в 22:36

Всем привет. Давненько тут не был.

Помогите докрутить запрос для 6-го друпала + уберкарт.

Имеем стандартные таблицы
uc_cart_products (данные корзин)
users
uc_products

Требуется составить таблицу со списком пользователей, где для каждого пользователя будет отражено:
-id-пользователя
-сумма товара в корзине
-кол-во товара в корзине
-дата последнего изменения в корзине

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

<?php$sql = "SELECT u.uid, 
  (SELECT COUNT(DISTINCT(cart_item_id)) FROM {uc_cart_products} as o WHERE o.cart_id = u.uid) as qty_list_products, 
  (SELECT SUM(qty) FROM {uc_cart_products} as ps WHERE cart_id = u.uid) as total_products 
  FROM {users} as u WHERE u.uid > 0 GROUP BY u.uid";?>

Пингеры от Яндекса для индексации страниц (офциальные модули)

29 апреля 2012 в 10:46

Яндекс выпустил модули "пингеры" для облегчения индексации страниц.

Цитирую Яндекс:
«Вы можете повысить приоритет индексирования некоторых страниц вашего сайта с помощью дополнений для CMS, которые могут отсылать запросы на индексацию автоматически. Дополнение, установленное в CMS, отслеживает изменения на сайте и генерирует запросы на индексацию при создании или изменении документов.»

Как сделать комплексный аудит сайта или дизайн-макета. Новый сервис - мне понравился.

1 декабря 2011 в 14:41

Буквально на днях наткнулся на отличный сервис по комплексному аудиту сайтов.

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

Одно дело выставить сайт на растерзание здесь, на друпал.ру где вас могут просто заклевать.

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

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

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

Почитал top100 открытых аудитов - это не только указание на недостатки, но и рекомендации, что можно улучшить с примерами. Все разбирается по полочкам, как уже упоминал.

P.S. Кроме заказчиков аудита приглашаются так же специалисты, готовые стать аудиторами.

Как сделать e-mail рассылку дайджестов любых материалов сайта в автоматическом режиме

1 сентября 2011 в 15:57

Только что опубликовал новость как комментарий в посте о модуле рассылок.

Здесь для удобства обсуждения еще раз расскажу как настроить автоматическую e-mail рассылку практически любых материалов с вашего сайта.
Настроить так, чтобы вебмастер не тратил время на составление рассылки и ее отправку.

Материалы публикуются на сайте и тут же попадают в рассылку, на основе определенных правил. Эти правила задаются через views.

Как это делается - всего 3 простых шага:

  1. Берете мой модуль подписки - он нужен для набора подписчиков. Или используете "ручную" форму подписки от сервиса
  2. Настраиваете любой фильтр через views на отдачу материалов в виде rss
  3. Скармливаете один, два или сколько вам нужно вариантов rss сервису рассылок и... вуаля: письма уходя автоматически.

Подробнее о том как скормить и настроить rss для отправки писем.

Это не просто банальное транслирование rss на e-mail. Вы получаете:

  • Возможность настроить дизайн рассылки под свой корпоративный стиль;
  • Гибкую настройка правил отправки сообщений;

Мой топ хостинга для drupal и не только. Личный опыт.

24 ноября 2010 в 23:25

безлимитный хостинг drupalКак и многие из вас я однажды задался вопросом — так есть ли идеальный и, желательно, безлимитный хостинг drupal?

Ну хочется же, чтобы все работало как часы: и uptime 100%, и тех поддержка на уровне, и работать удобно, и гибкость, и производительность, и все это за приемлемые деньги. Этакий выделенный хостинг... шаред хостинг )))

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

Прошло время и… мой ответ — идеального хостинга нет. Впрочем, есть весьма неплохие. Список ниже, с кратким акцентом на особенностях.

nic.ru или ру центр хостинг — вариант неплохой, но дороговато. Рекомендую выбирать тариф не ниже 301-го. Drupal-cайты на нем работают довольно шустро. Есть все необходимые акселераторы и возможность настраивать параметры php.ini под себя, включая php-memory. Можно устанавливать свои nginx, php, mysql и т.д. Хотя, даже используя возможности настроек «из коробки» все будет работать.

Руководство: как настроить SMS-уведомления в Ubercart

11 августа 2010 в 0:16

Т.к. при использовании модулей sms и e-mail рассылок возникают вопросы, решил описать ответ на наиболее сложный вопрос у себя в блоге - Drupal + Ubercart: настройка SMS-уведомлений - как эффективней и дешевле

Новый модуль для SMS и E-mail рассылок, в т.ч. для Ubercart

10 августа 2010 в 1:15

Написал пару небольших модулей для интеграции с сервисом UnisendResponder.ru - сервис персонализированных массовых e-mail рассылок и sms-рассылок. В том числе сервис умеет делать авторассылки, типа Смартреспондера.

Подробнее изучите сами, при желании Smile

Разве что ссылка на тарифы

Что умеют эти модули.

Оба модуля работают незаметно для пользователя, через API UnisendResponder

1. модуль unisendresponder

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

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

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

2. модуль sms_unisendresponder

Данный модуль зависит от smsframework - устанавливается как gateway для него.

Позволяет делать как массовые рассылки по вашим пользователям, указавшим мобильные телефоны. Так и в Ubercart уведомлять покупателей через SMS о смене статуса заказа.
Для этого требуется дополнительно модуль uc_ca_sms

Готовая платформа для создания корпоративных социальных сетей

7 августа 2010 в 21:29

Компания Acquia, курирующая разработку свободной системы управления web-контентом Drupal, представила новый проект - Drupal Commons 1.0....

Собственно, копипастить не буду, все по ссылке

Updated by webmaster: добавлена презентация Drupal Commons с http://buytaert.net/drupal-commons-meet-jive-software

как задать видимость блока в модуле?

30 марта 2010 в 16:28

Решил написать небольшой модуль для облегчения задачи управления видимостью блоков на страницах словарей и их терминов.

Все это можно сделать сниппетом (приведу ниже, мож кому пригодится), но для менеджера сайта это слишком сложно.

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

<?php
/**
 * Implementation of hook_form_alter().
 */
function custom_mod_form_alter(&$form, &$form_state$form_id) {
  if ((
$form_id == 'block_admin_configure' || $form_id == 'block_box_form' || $form_id == 'block_add_block_form')) {

      

$module $form['module']['#value'];
      
$delta $form['delta']['#value'];
      
      
$form['custom_mod_vis_settings'] = array(
        
'#type' => 'fieldset',
        
'#title' => t('Vocabulary visibility settings'),
        
'#collapsible' => TRUE,
        
'#collapsed' => FALSE,
        
'#weight' => 0,
      );

  

// Vocab-based visibility settings
  
$default_vocab_vis_options = array();
  
$result db_query("SELECT vid FROM {blocks_vocabulary} WHERE module = '%s' AND delta = '%s'"$module$delta);
  while (
$vocab db_fetch_object($result)) {
    
$default_vocab_vis_options[] = $vocab->vid;
  }
  
$result db_query('SELECT vid, name FROM {vocabulary} ORDER BY name');
  
$vocab_vis_options = array();
  while (
$vocab db_fetch_object($result)) {
    
$vocab_vis_options[$vocab->vid] = $vocab->name;
  }  
      
     
$form['custom_mod_vis_settings']['vocab_visability_blocks'] = array(
    
'#type' => 'radios'//checkboxes?>

Страница с комментариями отдельно - как?

30 ноября 2009 в 13:43

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

При переходе на страницу комментариев в начале только тизер материала, а дальше комментарии. При этом url материала и страницы комментариев разный.

Собственно, как это сделано на вебпланете

Кто пробовал делать или есть идеи как?

Снижение нагрузки через JavaScript/AJAX

30 октября 2009 в 0:54

Наткнулся на модуль JavaScript/AJAX page callback.

По описанию, якобы, повышает производительность в разы. Хотелось бы уточнить мнение опытных коллег в этом вопросе.

Что можете сказать о полезности данного модуля?

Выделенный сервер за 1000 руб. - новая услуга на рынке хостинга

13 сентября 2009 в 1:55

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

UP: Насколько понял здесь получается что-то на стыке между VPS и полноценным выделенным сервером, но предлагаю в обсуждениях не делать акцент в сравнениях именно на отставание в характеристиках от выделенного сервера. Это и так понятно.

А вот как альтернатива VPS - было бы полезно обменяться мнениями, а может кто-то даже опытом поделится.

Функция замены в template.php - как лучше сделать?

24 августа 2009 в 19:59

Для шаблона для ubercart в файле template.php сделал следующее:

<?php
 
if ($vars['template_files'][0] == 'node-product') {
       
$node node_build_content(node_load($vars['nid']));

    

$vars['fusion_uc_image'] = drupal_render($node->content['image']);
    
$vars['fusion_uc_body'] = drupal_render($node->content['body']);
    
$vars['fusion_uc_display_price'] = drupal_render($node->content['display_price']);
    
$vars['fusion_uc_add_to_cart'] = drupal_render($node->content['add_to_cart']);
    
$vars['fusion_uc_weight'] = drupal_render($node->content['weight']);
    
$vars['fusion_uc_dimensions'] = drupal_render($node->content['dimensions']);
    
$vars['fusion_uc_model'] = drupal_render($node->content['model']);
    
$vars['fusion_uc_list_price'] = drupal_render($node->content['list_price']);

//эта строка НЕ РАБОТАЕТ :(
    
$vars['fusion_uc_list_price'] = str_replace('USD'''drupal_render($node->content['list_price'])); 

    

$vars['fusion_uc_sell_price'] = drupal_render($node->content['sell_price']);
    
$vars['fusion_uc_cost'] = drupal_render($node->content['cost']);
    
$vars['fusion_uc_additional'] = drupal_render($node->content);
  }
?>

В шаблоне затем использую <?php print $fusion_uc_image?> и т.п.

Все хорошо и все работает, кроме строки $vars['fusion_uc_list_price'] - мне нужно символ валюты для этой строки убрать. Никак не получается.
Точнее в самом шаблоне легко прокатывает <?php $fusion_uc_list_price str_replace('USD'''$fusion_uc_list_price);?>

Помогите расширить запрос к базе [решено]

20 августа 2009 в 0:20

Есть три таблицы {reg_code}, {users} и {uc_addresses} все имеют пересечение по uid.

Хочу сделать выборку из всех трех таблиц одним запросом, а точнее добавить выборку из третьей таблицы {uc_addresses} вот к этому рабочему запросу:

<?php
$sql 
'SELECT u.uid, u.name, u.mail, r.created, r.referer
    FROM {reg_code} r INNER JOIN {users} u USING(uid)
    WHERE r.reg_uid = %d
    AND u.status = 1' 
tablesort_sql($header);
  
$result pager_query($sqlREFERRAL_PAGE_COUNT0NULL$uid);
  while (
$data db_fetch_object($result)) {
    
$rows[] = array(
      array(
'data' => $data->name),
      array(
'data' => $data->city), //это поле нужно взять из таблицы {uc_addresses}
      
array('data' => $data->mail),
      array(
'data' => format_date($data->created'custom'REFERRAL_DATE_FORMAT)),
      array(
'data' => $data->referer),
    );
  }
?>

Важно чтобы результат был с условием выборки данных по списку $uid.
Кроме u.name, u.mail, r.created, r.referer из третьей таблицы мне нужно взять поле city. Пометил комментарием в коде.

Интуитивно понимаю что через INNER JOIN делать надо или что-то подобное, но никак не соображу Sad
Не силен в сложных запросах.

Кто подскажет код запроса?

Улучшаем drupal.ru - теги, поиск, навигация

16 августа 2009 в 19:46

Уже не один раз поднималась тема об удобстве поиска и навигации по этому сайту. Unitag admin screenshots

Вроде как есть два словаря "Версия Drupal" и "Ключевые слова", но...

Если термины из словаря "Версия Drupal" реально полезны и помогают сориентироваться, то термины второго словаря находятся в состоянии "анархии" и практически не способствуют улучшению навигации по сайту. Не говорю что совсем бесполезные, но полезность для посетителя весьма не высока, ИМХО.

Если для личных блогов, фотосток и т.п. сайтов свободные теги больше похожи на порядок (там более очевиды темы), то на drupal.ru новичкам часто элементарно не хватает знаний для грамотной и правильно формулировки тегов к посту.

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

Кто что скажет?

Настройка хостов в Linux под мультисатинг

15 июля 2009 в 16:18

Коллеги, подскажите, как реализовать настройку хостов в Ubuntu для поддержки Wildcard, т.е. чтобы хост, например, mydrupal.ru откликался на все его как существующие так и "не существующие" поддомены.

В конфиге apache мне понятно как сделать, через *.mydrupal.ru

На боевых хостингах это реализовано как правило в виде подключаемой опции.

А вот как реализовать это у себя в локальной системе никак не догоню.

Как добавить такой "мультихост"?

Добавляю хосты и управляю сервером через Webmin.

Удобство администрирования друпал

3 июня 2009 в 19:00

Только что поставил себе модуль admin - впечатления определенно положительные.

Уже сейчас понравилось как сделано, а если будут развивать в этом направлении то модуль бесценный с точки зрения usability, ИМХО.

Пытаются взломать?

12 мая 2009 в 17:45

Кто подскажет, что значат попытки обратиться к сайту по такому url:
httр://www.site.ru/contact+++++++++++++++++++++++++++++++Result:+%F3%F1%EF%E5%F5;

У меня в логах фиксируется как php-ошибка.

Разные ip-адреса Украины, настойчиво уже несколько дней подряд.

Новый модуль кеширования на файлах CACHESTATIC

5 мая 2009 в 1:56

Только что увидел в новостях новый модуль CACHESTATIC для кеширования на файлах. Порадовало, что заявлено кеширование для зарегистрированных пользователей. Сейчас буду смотреть что к чему, а пока свободный пересказ-перевод о возможностях:

  • Управление кешем на основе url
  • Управление кешем на основе домена
  • Управление сроком жизни кеша индивидуально под url
  • тулбар на текущей странице для управления кешем
  • возможность просмотра списка закешированных страниц с датой истечения срока кеширования
  • удаление кеша при публикации
  • управление удалением кеша по крону
  • дополнительные теги в футере страницы
  • отключение кеша для отдельных страниц по признаку в url
  • поддержка мультисайтинга
  • админка не кешируется
  • формы для создания страниц не кешируются

Примерно так.

Предлагаю попробовать и обсудить результаты. По описанию весчь хорошая. Что скажете?

Сниппет облака тегов для мультисайтинга

3 марта 2009 в 0:56

Возникла задача, не соображу как сделать. Речь прежде всего про drupal 5, но если будет с комментариями для 6-ой версии, тоже спасибо.

Итак, есть сниппеты облако тегов + flash и замена облака тегов сниппетом

Все хорошо, все работает как и модуль tagadelic, но как бы сделать чтобы не выводились пустые термины в которых нет материалов с КОНКРЕТНОГО САЙТА.

Проверку на принадлежность материалов сайту проводит модуль мультисайтинга domain, но у терминов и словарей нет принадлежности к тому или иному сайту, потому они выводятся на всех сайтах все. И пустые и не пустые термины.

Нужно как-то сделать проверку терминов на пустоту так, чтобы это было сделано, например, через обертку запроса к базе в стандартную функцию вывода материалов из термина. Как если бы материал реально выводился (весь, титл или анонс - не важно). Тогда модуль domain отфильтрует материалы принадлежащие только этому сайту. Соотвественно надо не показать эти материалы, а только проверить их наличие для текущего сайта. И в зависмости от этого выводить или не выводить термин.

Пример логики, как представляю:

1. запрос всех терминов из {term_data}

далее

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

3. если вывод материалов из термина возможен на данном сайте, то выводим данный термин.