сайты

Подписаться на эту метку по RSS

Drupal 7, после создания очередной ноды или комментария, выводит сообщение, что-то вроде «Forum topic %title has been created.» (пример для форумного топика). Вы, конечно же, хотите написать здесь что-то своё. А что, если текст зависит от того опубликована нода или отправлена на подтверждение администратору? Это как-раз мой случай, потому что я использую модуль Simple Regex Filter, чтобы отсеивать подозрительные сообщения на форумах.

Самое простое решение, позволяющее изменить все сообщения вида «@type %title has been created.», — установить модуль Strings Override, и вперёд. Для сложных случаев, когда нужна какая-то логика: устанавливается модуль Disable Messages, а затем используется экшн Rules «Set a message».

Однако в моем теме Disable Message ломает стили, да и не слишком гибкое это решение.

Поэтому вот ещё версия. Если комментарии на английском вам не понятны, пишите ниже, я постараюсь объяснить или помочь переделать код ваши нужды.

/**
 * We customize 'Forum topic ... has been created.' message when
 * it goes to the approval queue. This is done in two steps:
 *
 * 1. Add new status messages implementing hook_node_insert().
 *    This is done for both Published and Unpublished nodes.
 *    For Published nodes we just duplicate the old message.
 *    For Unpublished nodes we inform that the message is waiting for approval.
 *
 * 2. Remove old status message implementing hook_form_FORM_ID_alter().
 *    We override 'submit' action where we remove old messages in case it
 *    matches the pattern '@type %title has been created.'.
 *    We only remove a single match, so even if we duplicate a message
 *    on the first step, one of them will still be displayed.
 *
 * We customize also the Drupal behavior when a Forum Topic was updated and
 * the new revision goes to the Approval Queue. Now it redirects a user to
 * the Forum Category and shows the similar status message to inform the user.
 * We use hook_node_update() for that.
 */
 
/**
 * Implements hook_node_insert()
 */
function MY_MODULE_node_insert($node) {
  /**
   * Add custom status messages when a node is inserted
   */
  if ($node->type == 'forum') {
    if ($node->status == NODE_NOT_PUBLISHED) {
      drupal_set_message(t('Your forum topic has been queued for review by site administrators and will be published after approval.'));
    }
    elseif ($node->status == NODE_PUBLISHED) {
      $message = t('@type %title has been created.', array('@type' => node_type_get_name($node), '%title' => $node->title));
      drupal_set_message($message, 'status', TRUE);
    }
  }
}
 
/**
 * Implements hook_node_update()
 */
function MY_MODULE_node_update($node) {
  /**
   * If a Forum Topic was updated and the new revision goes to the Approval Queue
   * we redirect a user to the Forum Category and show a message to keep him informed.
   */
  if ($node->type == 'forum') {
    if ($node->status == NODE_NOT_PUBLISHED) {
      drupal_set_message(t('Your forum topic has been queued for review by site administrators and will be published after approval.'));
      drupal_goto('forum/' . $node->forum_tid);
    }
  }
}
 
/**
 * Implements hook_form_FORM_ID_alter().
 * @see MY_MODULE_node_insert()
 */
function MY_MODULE_form_forum_node_form_alter(&$form, &$form_state, $form_id) {
  /**
   * Override 'submit' action for 'forum_node_form' form
   */
  $form['actions']['submit']['#submit'][] = '_MY_MODULE_form_forum_node_form_submit';
}
 
/**
 * @see MY_MODULE_form_forum_node_form_alter()
 */
function _MY_MODULE_form_forum_node_form_submit($form, &$form_state) {
  /**
   * Remove the old status message 'Forum topic ... has been created.'
   */
  if (!empty($_SESSION['messages']['status'])) {
    $node = $form_state['node'];
    $old_message = t('@type %title has been created.', array('@type' => node_type_get_name($node), '%title' => $node->title));
    $old_message_key = array_search($old_message, $_SESSION['messages']['status']);
    
    if ($old_message_key !== FALSE) {
      unset($_SESSION['messages']['status'][$old_message_key]);
      
      // Reset array indexes. Otherwise it doesn’t work with some theme templates.
      $_SESSION['messages']['status'] = array_values($_SESSION['messages']['status']);
      
      // Remove the empty status message wrapper if no other messages have been set.
      if (empty($_SESSION['messages']['status'])) {
        unset($_SESSION['messages']['status']);
      }
    }
  }
}

Попался под руку сайт с приличной мультинациональной базой пользователей (? 10 000 более менее активных пользователей). И промежду прочим мне надо было узнать некоторую статистическую информацию. Вот, делюсь распределением длины имени пользователя для входа в систему (login name).

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

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

Наткнулся на прелюбопытнейшую вещь — Epic Citadel, что является наименованием демонстрационной локации на движке Unreal Engine, но не простого, а портированного в JavaScript.

Иными словами — есть инструмент, который называется Emscripten, являющий собой преобразователь C/C++ кода в JavaScript код. Люди из Epic Games (это те кто когда-то создали Unreal Tournament) взяли да и перевели свой движок Unreal Engine 3 полностью на рельсы HTML5 (WebGL) и JavaScript за 4 дня. Всё что вы видите, если видите, это голый JavaScript, что само по себе кажется фантастикой.

 

читать дальше »

(Мой) змеиный год — первый год, когда я высказываюсь в блоге уже после его наступления. Проснувшись 3-ого января, я просто вспомнил, что никаких напутствий не оставил. А между тем праздничная речь в блоге была уже традицией. Вот посмотрите как я разрывал эфир в ночь на 2011-й, а этот опус вышел по случаю наступления 2012-ого.

читать дальше »

Для тех кто работает с системами контроля версий (для программистов, короче) был разработан и внедрен в эксплуатацию незаменимый инструмент: http://whatthecommit.com/.

 

 

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

 

Upd. 2012. Добавляйте к сгенерированным словам что-нибудь по существу, а то вас уволят.

Как-то раз я подключил сайт к рекламной сети AdLabs. Сеть понравилась прежде всего удобством, гибкостью настроек (фильтрация объявлений по темам, хороший набор размеров баннеров), а также качеством рекламного материала: в базе тизеров этой сети нет откровенного шлака, от которого вас обычно тошнит, попробуй зайди вы на какой древний и неухоженный, обросший старческими рекламными фурункулами сайт (ничего личного, но amdm.ru,  как пример).

Мои ~220 посетителей в сутки конечно не способствуют ощущению тяжести в кармане от заработанных на рекламном поприще денег, зато стабильно и без эксцессов деньги накопились до минимально выплачеваемой суммы в 260 руб. и автоматически перевелись на webmoney-кошелек, так что я уже доволен самим фактом (напомню, что не очень давно Google AdSense бесстрастно порвали со мной отношения).

Помимо прочего, я приглашаю начинающих вебмастеров начать работу с тизерными сетями именно через AdLabs, поверьте это действительно мягкий старт. Порог вхождения — 100 посетителей в сутки — оптимален: меньше нет смысла, а больше не всегда бывает на первых порах. Вы не сделаете из сайта помойку, по крайней мере, выбрав другую сеть, вероятность фатального развития событий выше. Реклама в массе своей на порядок качественнее тизерных сетей конкурентов. Ну и последнее, я просто был бы рад, если вы зарегистрируетесь по моей реферальной ссылке — помогу и с настройками, и с дизайном объявлений. Как показали мои небольшие исследования, от собственно цветов и местоположения баннеров доход может подниматься/опускаться в разы.

Сейчас я опишу довольно редкую проблему, которая выглядит вот так:

 

 

Вы по привычке набираете в браузере http://localhost/ и озадачено смотрите на ошибку:

Not Found
HTTP Error 404. The requested resource is not found.

читать дальше »