Сегодня 7 мая, вторник ГлавнаяНовостиО проектеЛичный кабинетПомощьКонтакты Сделать стартовойКарта сайтаНаписать администрации
Поиск по сайту
 
Ваше мнение
Какой рейтинг вас больше интересует?
 
 
 
 
 
Проголосовало: 7272
Кнопка
BlogRider.ru - Каталог блогов Рунета
получить код
Не только о покере
Не только о покере
Голосов: 1
Адрес блога: http://leonidovich.net
Добавлен: 2010-11-10 21:24:24
 

Вывод контента у термина и всех его дочерних терминов

2015-12-14 09:03:35 (читать в оригинале)

Есть древовидный словарь таксономии. Нужно на странице catalog/% вывести контент у термина указанного в адресе и всех его дочерних терминов.

Вариант 1

Если заранее известна максимальная глубина дерева, то можно добавить в представление контекстный фильтр по Content: Has taxonomy term ID (with depth) в котором указать максимальную глубину:

При таком варианте на каждый уровень вложенности создаётся отдельный sql join, что возможно не лучший выход (скриншот).

Вариант 2

Если максимальный уровень заранее неизвестен или хочется избавиться от джоинов, то можно добавить контекстный фильтр по полю термина (в моём случае это "Content: Tags (field_tags)"), отметить опцию Allow multiple values иподменить значение фильтра с помощью кода:

$tids = [$argument];
foreach (taxonomy_get_tree(VID_СЛОВАРЯ, $argument) as $terms) {
  $tids[] = $terms->tid;
}
$handler->argument = implode('+', $tids);
return TRUE;

Источник



Работа с базой данных в Drupal 6,7

2015-12-14 04:55:04 (читать в оригинале)

Выборка с условием:

// Drupal 6
$nodes = db_query("
  SELECT nid, title FROM {node}
  WHERE type = '%s' AND uid = %d
", 'page', 1);
 
// Drupal 7, static query
$nodes = db_query("
  SELECT nid, title FROM {node}
  WHERE type = :type AND uid = :uid
", array(':type' => 'page', ':uid' => 1))->fetchAll();
 
// Drupal 7, dynamic query
$nodes = db_select('node', 'n')
  ->fields('n', array('nid', 'title'))
  ->condition('n.type', 'page')
  ->condition('n.uid', 1)
  ->execute()
  ->fetchAll();

Выборка из двух таблиц соединённых с помощью INNER JOIN:

// Drupal 6
$nodes = db_query("
  SELECT n.title, u.name FROM {node} n
  INNER JOIN {users} u ON n.uid = u.uid
");
 
// Drupal 7, static query
$nodes = db_query("
  SELECT n.title, u.name FROM {node} n
  INNER JOIN {users} u ON n.uid = u.uid
")->fetchAll();
 
// Drupal 7, dynamic query
$query = db_select('node', 'n');
$query->innerJoin('users', 'u', 'n.uid = u.uid');
$query->fields('n', array('title'));
$query->fields('u', array('name'));
$nodes = $query->execute()->fetchAll();

Следует помнить, что некоторые методы (например джоины) не возвращают объект SelectQuery, и поэтому их нельзя использовать в цепочке вызовов вроде db_select()->method1()->innerJoin()->method2().

Получить значение поля у единственной записи:

// Drupal 6
$title = db_result(db_query("SELECT title FROM {node} WHERE nid = %d", 123));
 
// Drupal 7, static query
$title = db_query("SELECT title FROM {node} WHERE nid = :nid", array(':nid' => 123))->fetchField();
 
// Drupal 7, dynamic query
$title = db_select('node', 'n')
  ->fields('n', array('title'))
  ->condition('n.nid', 123)
  ->execute()
  ->fetchField();

Получить объект по его id:

// Drupal 6
$node = db_fetch_object(db_query("SELECT * FROM {node} WHERE nid = %d", 123));
 
// Drupal 7, static query
$node = db_query("SELECT * FROM {node} WHERE nid = :nid", array(':nid' => 123))->fetchObject();
 
// Drupal 7, dynamic query
$node = db_select('node', 'n')
  ->fields('n')
  ->condition('n.nid', 123)
  ->execute()
  ->fetchObject();

Посчитать число записей:

// Drupal 6
$count = db_result(db_query("SELECT COUNT(*) FROM {node} n WHERE n.uid = 1"));
 
// Drupal 7, static query
$count = db_query("SELECT COUNT(*) FROM {node} n WHERE n.uid = 1")->fetchField();
 
// Drupal 7, dynamic query, вариант 1
$count = db_select('node', 'n')
  ->condition('n.uid', 1)
  ->countQuery()
  ->execute()
  ->fetchField();
 
// Drupal 7, dynamic query, вариант 2
$query = db_select('node');
$query->addExpression('COUNT(*)');
$count = $query->execute()->fetchField();

Найти минимальное значение:

// Drupal 6
$min = db_result(db_query("SELECT MIN(fieldname) FROM {table}"));
 
// Drupal 7, static query
$min = db_query("SELECT MIN(fieldname) FROM {table}")->fetchField();
 
// Drupal 7, dynamic query
$query = db_select('table');
$query->addExpression('MIN(fieldname)');
$min = $query->execute()->fetchField();

Выбрать определённое количество записей:

// Drupal 6
$nodes = db_query("SELECT * FROM {node} LIMIT 0, 10");
 
// Drupal 7, static query
$nodes = db_query("SELECT * FROM {node} LIMIT 0, 10")->fetchAll();
 
// Drupal 7, dynamic query
$nodes = db_select('node', 'n')
  ->fields('n')
  ->range(0, 10)
  ->execute()
  ->fetchAll();

Обойти записи:

// Drupal 6
$nodes = db_query("SELECT * FROM {node}");
while ($node = db_fetch_object($nodes)) {
  $items[] = $node->title;
}
 
// Drupal 7, static query
$result = db_query("SELECT * FROM {node}");
foreach ($result as $node) {
  $items[] = $node->title;
}
 
// Drupal 7, dynamic query
$result = db_select('node', 'n')->fields('n')->execute();
foreach ($result as $node) {
  $items[] = $node->title;
}

Обновление записи:

// Drupal 6
db_query("UPDATE {node} SET status = %d WHERE nid = %d", 1, 123);
 
// Drupal 7, static query
db_query("UPDATE {node} SET status = :status WHERE nid = :nid", array(':status' => 1, ':nid' => 123));
 
// Drupal 7, dynamic query
db_update('node')
  ->fields(array('status' => 1))
  ->condition('nid', 123)
  ->execute();

Инкремент значения поля:

// Drupal 6
db_query("UPDATE {node_counter} SET totalcount = totalcount + 1 WHERE nid = %d", 123);
 
// Drupal 7, static query
db_query("UPDATE {node_counter} SET totalcount = totalcount + 1 WHERE nid = :nid", array(':nid' => 123));
 
// Drupal 7, dynamic query
db_update('node_counter')
  ->expression('totalcount', 'totalcount + 1')
  ->condition('nid', 123)
  ->execute();

Удаление записи:

// Drupal 6
db_query("DELETE FROM {node} WHERE uid = %d AND created < %d", 1, time() - 3600);
 
// Drupal 7, static query
db_query("DELETE FROM {node} WHERE uid = :uid AND created < :created", array(':uid' => 1, ':created' => time() - 3600));
 
// Drupal 7, dynamic query
db_delete('node')
  ->condition('uid', 1)
  ->condition('created', time() - 3600, '<')
  ->execute();

Очистка таблицы:

// Drupal 6, Drupal 7 static query
db_query("TRUNCATE {node}");
 
// Drupal 7, dynamic query
db_truncate('node')->execute();

Добавление записи:

// Drupal 6
db_query("INSERT INTO {mytable} (intvar, stringvar, floatvar) VALUES (%d, '%s', %f)", 5, 'hello world', 3.14);
$id = db_last_insert_id();
 
// Drupal 7, dynamic query
$id = db_insert('mytable')
  ->fields(array(
    'intvar' => 5,
    'stringvar' => 'hello world',
    'floatvar' => 3.14,
  ))
  ->execute();

Для добавления данных можно по прежнему пользоваться drupal_write_record()

Использование логического оператора OR в условии:

// Drupal 6
$nodes = db_query("SELECT * FROM {node} WHERE uid = %d OR status = %d", 1, 0);
 
// Drupal 7, static query
$nodes = db_query("SELECT * FROM {node} WHERE uid = :uid OR status = :status", array(':uid' => 1, ':status' => 0))->fetchAll();
 
// Drupal 7, dynamic query
$nodes = db_select('node', 'n')
  ->fields('n')
  ->condition(
    db_or()
      ->condition('uid', 1)
      ->condition('status', 0)
  )
  ->execute()
  ->fetchAll();

Использование оператора IN в условии:

$nids = array(1, 2, 3);
 
// Drupal 6
$nodes = db_query("SELECT * FROM {node} WHERE nid IN (" . db_placeholders($nids) . ")", $nids);
 
// Drupal 7, static query
$nodes = db_query("SELECT * FROM {node} WHERE nid IN (:nids)", array(':nids' => $nids))->fetchAll();
 
// Drupal 7, dynamic query
$nodes = db_select('node', 'n')
  ->fields('n')
  ->condition('n.nid', $nids, 'IN')
  ->execute()
  ->fetchAll();

Использование оператора LIKE в условии:

// Drupal 6
$nodes = db_query("SELECT * FROM {node} WHERE title LIKE '%%%s%%'", 'substring');
 
// Drupal 7, static query
$nodes = db_query("SELECT * FROM {node} WHERE title LIKE :title", array(':title' => '%' . db_like('substring') . '%'))->fetchAll();
 
// Drupal 7, dynamic query
$nodes = db_select('node', 'n')
  ->fields('n')
  ->condition('n.title', '%' . db_like('substring') . '%', 'LIKE')
  ->execute()
  ->fetchAll();

Использование оператора BETWEEN в условии:

// Drupal 6
$nodes = db_query("SELECT * FROM {node} WHERE nid BETWEEN %d AND %d", 123, 456);
 
// Drupal 7, static query
$nodes = db_query("SELECT * FROM {node} WHERE nid BETWEEN :nid1 AND :nid2", array(':nid1' => 123, ':nid2' => 456))->fetchAll();
 
// Drupal 7, dynamic query
$nodes = db_select('node', 'n')
  ->fields('n')
  ->condition('n.nid', array(123, 456), 'BETWEEN')
  ->execute()
  ->fetchAll();

Проверка значения на NULL:

// Drupal 6, Drupal 7 static query
$result = db_query("SELECT * FROM {table} WHERE field IS NULL");
 
// Drupal 7, dynamic query, вариант 1
$result = db_select('table', 't')
  ->fields('t')
  ->condition('t.field', NULL, 'IS NULL')
  ->execute();
 
// Drupal 7, dynamic query, вариант 2
$result = db_select('table', 't')
  ->fields('t')
  ->isNull('t.field')
  ->execute();

Сложные условия в WHERE:

// Drupal 6
$nodes = db_query("SELECT * FROM {node} WHERE YEAR(FROM_UNIXTIME(created)) = %d", 2011);
 
// Drupal 7, static query
$nodes = db_query("SELECT * FROM {node} WHERE YEAR(FROM_UNIXTIME(created)) = :created", array(':created' => 2011))->fetchAll();
 
// Drupal 7, dynamic query
$nodes = db_select('node', 'n')
  ->fields('n')
  ->where('YEAR(FROM_UNIXTIME(n.created)) = :created', array(':created' => 2011))
  ->execute()
  ->fetchAll();

Сортировка:

// Drupal 6
$nodes = db_query("SELECT * FROM {node} ORDER BY created DESC, title ASC");
 
// Drupal 7, static query
$nodes = db_query("SELECT * FROM {node} ORDER BY created DESC, title ASC")->fetchAll();
 
// Drupal 7, dynamic query
$nodes = db_select('node', 'n')
  ->fields('n')
  ->orderBy('n.created', 'DESC')
  ->orderBy('n.title', 'ASC')
  ->execute()
  ->fetchAll();

Получить результаты запроса в виде двумерного ассоциативного массива:

// Drupal 6
$result = db_query("SELECT nid, title, created FROM {node}");
$nodes = array();
while ($row = db_fetch_object($result)) {
  $nodes[$row->nid] = $row;
}
 
// Drupal 7, static query
$nids = db_query("SELECT nid, title, created FROM {node}")->fetchAllAssoc('nid');
 
// Drupal 7, dynamic query
$nids = db_select('node', 'n')
  ->fields('n', array('nid', 'title', 'created'))
  ->execute()
  ->fetchAllAssoc('nid');

Получить одну колонку из таблицы в виде простого одномерного массива:

// Drupal 6
$result = db_query("SELECT nid FROM {node}");
$nids = array();
while ($row = db_fetch_object($result)) {
  $nids[] = $row->nid;
}
 
// Drupal 7, static query
$nids = db_query("SELECT nid FROM {node}")->fetchCol();
 
// Drupal 7, dynamic query
$nids = db_select('node', 'n')
  ->fields('n', array('nid'))
  ->execute()
  ->fetchCol();

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

// Drupal 6
$result = db_query("SELECT nid, title FROM {node}");
$titles = array();
while ($row = db_fetch_object($result)) {
  $nids[$row->nid] = $row->title;
}
 
// Drupal 7, static query
$titles = db_query("SELECT nid, title FROM {node}")->fetchAllKeyed();
 
// Drupal 7, dynamic query
$titles = db_select('node', 'n')
  ->fields('n', array('nid', 'title'))
  ->execute()
  ->fetchAllKeyed();

Полный мануал с кучей примеров есть на официальном сайте — Database API.

Источник



Друпал. Вывод ошибок на экран

2015-11-08 10:54:41 (читать в оригинале)

Способ 1.Включение вывода ошибок на экран через php.ini

Если вы имеете доступ (ну а вдруг) к серверу, то в конфигурационном файле php.ini найдите параметр error_reporting и установите его значение в E_ALL.

error_reporting = E_ALL

Способ 2. Включение вывода ошибок на экран через .htaccess

В корне Друпала имеется файл .htaccess, который регулирует процессы загрузки страниц. Чтобы включить вывод сообщений, откройте его и добавьте следующие две строки:

php_flag display_errors on

php_flag display_startup_errors on

Способ 3. Включение вывода ошибок на экран через index.php

Опять затронем файлы в корне Друпала, но на этот раз index.php. Здесь для вывода сообщений надо перед строкой с подключением bootstrap.ini добавить

error_reporting(7): error_reporting(7);

require_once './includes/bootstrap.inc';

Способ 4. Включение вывода ошибок на экран через settings.php

Сразу скажу, этот способ действует только для Drupal 7. В папке sites/default/ есть файл settings.php. Откройте его и добавьте вот эти строки:

error_reporting(-1);

$conf['error_level'] = 2;

ini_set('display_errors', TRUE);

ini_set('display_startup_errors', TRUE);

Источник



Debian. Обновление версии php.

2015-07-21 18:59:24 (читать в оригинале)

Проверяем версию PHP

php -v

В /etc/apt/sources.list добавляем строки:

deb http://packages.dotdeb.org wheezy-php55 all

deb-src http://packages.dotdeb.org wheezy-php55 all

Скачиваем и устанавливаем GnuPG ключ

wget http://www.dotdeb.org/dotdeb.gpg

apt-key add dotdeb.gpg ; apt-get update

Устанавливаем PHP 5.5

apt-get install php5

Если у вас вместо MySQL MariaDB, то устанавливаем php5-mysqlnd

apt-get install php5-mysqlnd

Производим чистку

apt-get autoremove ; apt-get autoclean



Выбор участка

2015-07-18 17:25:41 (читать в оригинале)

Существует три варианта покупки участка, а следовательно три локации поисков:

  1. Покупка через риэлтора

  2. Покупка у частного лица

  3. Покупка у государства через аукцион

Риэлторы

Риэлторы берут за свои услуги от 1000 до 7000 у.е, причем услуги эти состоят в мониторинге частных объявлений в интернете и обновлении базы. Таким «тяжким» трудом я вполне мог заняться и сам, поэтому вариант обращения к риэлтору сразу отпал.

Частники

Объявления частников можно найти в интернете (самые адекватные ресурсы с хорошим выбором это барахолка он-лайнера (популярен среди минчан) и куфар. Бай (популярен в небольших городах), на остальных сайтах объявления, как правило, дублируются из первых двух источников). Другой вариант – это купить местные газеты (в интересующем вас населенном пункте) или почитать объявления на столбах. Он-лайн версии районых газет найти не удалось, либо в них не дублируются объявления, а до объявлений на столбах слишком далеко. Поэтому мониторили интернет.

Частники часто продают участки с фундаментом, как я понял, незаконченное строительство продать проще, а продажа голого участка зависит от метода его получения (там свои проволочки). С одной стороны покупка такого участка — это экономия времени, а может и денег, на проекте и фундаменте, а с другой – придется строить дом чужой «мечты». При выборе участка с фундаментом важно что бы фундамент был тех же размеров и пропорций, что и в вашем проекте, либо меньшего размера. Гораздо легче залить недостающий фрагмент фундамента под свой проект, чем демонтировать лишнее.

Аукционы

В аукционную зону попадают все сельсоветы примерно в радиусе 50км ±. Дальше этой зоны участок продают за фиксированную цену любому желающему (эта цена гораздо ниже аукционной). По закону все райисполкомы обязаны вывешивать объявление об аукционах на своих сайтах. Гуглим сайт райисполкома нужного района и смотрим раздел «аукционы», там есть вся нужная информация. Одним из существенных плюсов аукционов является то, что у вас точно не будет проблем с оформлением участка, в отличии от покупки у частника. Из минусов – аукционы проходят редко. Если еще в минском районе пару раз в месяц, то в районных центрах – всего раз в полгода (для каждого сельсовета свой аукцион со своими датами).

Отвечающий моим требованиям участок я нашел именно среди выставленных на аукцион. А вот на требованиях остановимся подробнее.

Все их можно разделить на 3 категории:

  1. Инфраструктура населенного пункта

  2. Коммуникации

  3. Транспортная доступность (близость к Минску)

Инфраструктура

Для меня обязательным условием было наличие школы и сада до 5 км от дома, магазины в шаговой доступности, желательным – наличие поликлиники/больницы. Ничего сверхъестественного.

Коммуникации

Вода. Отсутствие воды на участке не критично, если её нет, можно пробурить собственную скважину, цена вопроса 30 у.е. за метр бурения. Больше 50м в Беларуси никто не бурит, т.е. за 1000-1500 можно решить проблему отсутствия воды.

Электричество. Как правило, есть везде, но мы бы не жили в Беларуси, если б все было так просто =) На одном из рассматриваемых участков столкнулись с проблемой , что электричество должны были провести 2 года назад, но так и не провели, люди построили дома, а заселиться не могут. Автономное электричество ( солнечные батареи + аккумуляторы + сопутствующее оборудование) обойдется примерно в 15 000 у.е.

Канализация. Есть только в населенных пунктах от 2 тыс чел. (обращайте снимание на многоэтажки, если они есть, то есть и центральная канализация, если нет – то вряд ли). Можно делать местную (при правильном подходе больших проблем не вызывает, стоимость около 2000 у.е), но как-то не хочется говно в огороде =)))

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

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

На этом с коммуникациями всё.

Транспортная доступность

Здесь интересен такой нюанс – расстояние от Минска не так важно, как кажется на первый взгляд, важно количество транспорта, которое ходит до города и качество дорог. Если участок в 15 км от Минска, но все эти 15 км нужно ехать по гравейке, и рейсовый автобус ходит раз в сутки , это гораздо хуже чем 70 км по республиканской трассе с ограничением скорости 120 км\час, и маршрутками каждые пол часа, т. е. Для меня важно не растояние, а время, за которое можно добраться до Минска. К тому же, если населенный пункт большой, не так уж часто нужно ездить (особенно если работать удаленно) + экология лучше. В стоимость участка расстояние добавляет вес, как правило, без учета выше написанного.

На что еще стоит обратить внимание

  • Грунтовые воды. Если на участке болотная растительность или в колодце по соседству вода в 2-х метрах, то лучше такой вариант не рассматривать, замучаешься.

  • Уклон участка. Если уклон большой, то участок придется выравнивать, машина песка стоит 100 у.е, а их нужно будет много (зависит от уклона), знающие геометрию могут посчитать (в машине 6-7 кубометров песка).

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

  • ЛЭПы, охранные зоны. Если по участку проходит какой-то структурный объект (газ, ЛЭП, природоохранная зона) — это накладывает серьезные ограничения на строительство. А высоковольтные ЛЭП, говорят, не очень хорошо влияют на здоровье.

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



Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 

 


Самый-самый блог
Блогер ЖЖ все стерпит
ЖЖ все стерпит
по количеству голосов (152) в категории «Истории»


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