Разное → Вопросы

14.01.2011

Топик закрыт.

Похожие записи

Комментарии

Доброе утро, подскажи пожалуйста, что за фигня.
У меня Drupal 7 скачал девки версии Tagadelic и Cumulus.. поставил.
Вроде сделал всё по документации, но блок отображает полный маркап ссылок, прикрепляю картинку чтобы всё стало понятно.
Подскажи, как решить? и в чём проблема? Чтоб знать на будущее. Спасибо!
Собственно наглядно..

Доброй ночи, посоветовали обратиться к вам, буду благодарен безмерно за любую помощь!
Суть вот в чем. На сайте с 7 Друпалом сделаны 7 страниц-разделов-сайта и 37 страниц-подразделов-сайта терминами таксономии, на каждой странице стоит от 1 до 8 вьюх, обновляется за день 7 разделов и, соответственно, 7 подразделов (не 37).
Стоит модуль xmlsitemap, который изначально не прописывал ни lastmod, ни changefreq для терминов таксономии. А их необходимо обновлять по 14 штук раз в день. То есть lastmod надо сделать в карте сайта для них по времени добавления на них нового материала через соответствующую вьюху. Вьюхи вылазят на страницах при помощи Context-модуля и отображаются через Display Suite анонсами нод с сортировкой по дате обновления.
Сегодня нарыл код с сайта: http://scito.ch/content/add-lastmod-changefreq-and-changecount-sitemapx…
Сделал такой модуль. Теперь в карте сайта генерируется дата СОЗДАНИЯ термина таксономии. Как можно привязать эту дату к не к term_created из бд, а к timestamp анонса ноды, отображающейся в определенной вьюхе на этой странице термина (дате изменения)?
Я не программист, сразу оговорюсь. Модуль сделал по инструкции. За любую помощь, повторюсь, скажу спасибо, а когда будет много денег - с удовольствием поделюсь и угощу пивом :)

Ну с друпал.ру посоветовали у Вас спросить такое :)

Вот здесь

<?php
/**
* Fetch all timestamps when a taxonomy term or his direct child was changed.
*
* @param $node
*   A node object.
* @return
*   An array of UNIX timestamp integers.
*/
function termlastmod_term_get_timestamps(stdClass $term) {
  static $term_timestamps = array();

  if (!isset($term_timestamps[$term->tid])) {
    $term_timestamps[$term->tid] = db_query("SELECT ti.created FROM {taxonomy_index} ti WHERE ti.tid = :tid
      UNION ALL
      SELECT ti.created FROM {taxonomy_term_hierarchy} th, {taxonomy_index} ti WHERE th.parent = :tid AND th.tid = ti.tid", array(':tid' => $term->tid))->fetchCol();
  }

  return $term_timestamps[$term->tid];
}

/**
* Add changefreq, changecount and lastmod for taxonomy terms.
*
* Implements hook_xmlsitemap_link_alter.
*
* @param $link
*   An array with the data of the sitemap link.
*/
function termlastmod_xmlsitemap_link_alter(&$link) {
  if ($link['type'] == 'taxonomy_term') {
    // dpm($link, 'link');
    $tid = $link['id'];
    $term = taxonomy_term_load($tid);
    // dpm($term);

    // Always recalculate changefreq and changecount.
    $timestamps = termlastmod_term_get_timestamps($term);
    $link['changefreq'] = $term->tid ? xmlsitemap_calculate_changefreq($timestamps) : 0;
    $link['changecount'] = $term->tid && (count($timestamps) > 0) ? count($timestamps) - 1 : 0;
    $link['lastmod'] = count($timestamps) > 0 ? max($timestamps) : 0;
  }
}
?>

я хочу выводить не таймстамп термина, а таймстамп из анонса ноды из вьюса на странице этого термина

что такое "таймстамп из анонса ноды из вьюса на странице этого термина"?

время в формате Unix. Есть у каждой ноды в Друпале. Копаюсь в базе SQL, нашел там эту байду)

что такое таймстамп, анонс, нода, вьюс и термин я знаю. я не знаю что такое "таймстамп из анонса ноды из вьюса на странице этого термина"

я так понимаю , что это время создания ноды , которая была последней добавлена в данный термин

это время изменения ноды, которая выводится на странице термина таксономии при помощи Views и отображается (нода) при помощи Display Suite в формате анонса (не полного содержимого)

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

$timestamp = db_query("
  SELECT n.changed
  FROM {node} n
  INNER JOIN {taxonomy_index} ti ON ti.nid = n.nid
  WHERE ti.tid = :tid
  ORDER BY n.changed DESC
  LIMIT 1
", array(':tid' => TID_ТЕРМИНА))->fetchField();

Оказалось не только в нем проблема, и IMCE перестала загружать файлы. Вместе с IMCE стоит IMCE mkdir, но он нормально создает папки. Из-за чего может быть так?

в модуль естественно добавить
заменить $timestamps =

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

<?php
/**
* Fetch all timestamps when a taxonomy term or his direct child was changed.
*
* @param $node
*   A node object.
* @return
*   An array of UNIX timestamp integers.
*/
function termlastmod_term_get_timestamps(stdClass $term) {
  static $term_timestamps = array();

  if (!isset($term_timestamps[$term->tid])) {
    $term_timestamps[$term->tid] = db_query("SELECT ti.created FROM {taxonomy_index} ti WHERE ti.tid = :tid
      UNION ALL
      SELECT ti.created FROM {taxonomy_term_hierarchy} th, {taxonomy_index} ti WHERE th.parent = :tid AND th.tid = ti.tid", array(':tid' => $term->tid))->fetchCol();
  }

  return $term_timestamps[$term->tid];
}

/**
* Add changefreq, changecount and lastmod for taxonomy terms.
*
* Implements hook_xmlsitemap_link_alter.
*
* @param $link
*   An array with the data of the sitemap link.
*/
function termlastmod_xmlsitemap_link_alter(&$link) {
  if ($link['type'] == 'taxonomy_term') {
    // dpm($link, 'link');
    $tid = $link['id'];
    $term = taxonomy_term_load($tid);
    // dpm($term);

    // Always recalculate changefreq and changecount.
    $timestamp = db_query("
  SELECT n.changed
  FROM {node} n
  INNER JOIN {taxonomy_index} ti ON ti.nid = n.nid
  WHERE ti.tid = :tid
  ORDER BY n.changed DESC
  LIMIT 1
", array(':tid' => TID_ТЕРМИНА))->fetchField();
    $link['changefreq'] = $term->tid ? xmlsitemap_calculate_changefreq($timestamps) : 0;
    $link['changecount'] = $term->tid && (count($timestamps) > 0) ? count($timestamps) - 1 : 0;
    $link['lastmod'] = count($timestamps) > 0 ? max($timestamps) : 0;
  }
}
?>

", array(':tid' => TID_ТЕРМИНА))->fetchField();
TID_ТЕРМИНА надо же наверное заменить на $tid

Сокол, так и сделал. Теперь после изменения термина таксономии выскакивает:

Warning: sort() expects parameter 1 to be array, boolean given в функции xmlsitemap_calculate_changefreq() (строка 1230 в файле /home/***/sites/all/modules/xmlsitemap/xmlsitemap.module).
Warning: max() [function.max]: When only one parameter is given, it must be an array в функции termlastmod_xmlsitemap_link_alter() (строка 48 в файле /home/***/sites/all/modules/termlastmod/termlastmod.module).

и по-прежнему не показывается ни дата посл. изм., ни частота в файле сайтмап :(

termlastmod.module полностью:

<?php
/**
* Fetch all timestamps when a taxonomy term or his direct child was changed.
*
* @param $node
*   A node object.
* @return
*   An array of UNIX timestamp integers.
*/
function termlastmod_term_get_timestamps(stdClass $term) {
  static $term_timestamps = array();

  if (!isset($term_timestamps[$term->tid])) {
    $term_timestamps[$term->tid] = db_query("SELECT ti.created FROM {taxonomy_index} ti WHERE ti.tid = :tid
      UNION ALL
      SELECT ti.created FROM {taxonomy_term_hierarchy} th, {taxonomy_index} ti WHERE th.parent = :tid AND th.tid = ti.tid", array(':tid' => $term->tid))->fetchCol();
  }

  return $term_timestamps[$term->tid];
}

/**
* Add changefreq, changecount and lastmod for taxonomy terms.
*
* Implements hook_xmlsitemap_link_alter.
*
* @param $link
*   An array with the data of the sitemap link.
*/
function termlastmod_xmlsitemap_link_alter(&$link) {
  if ($link['type'] == 'taxonomy_term') {
    // dpm($link, 'link');
    $tid = $link['id'];
    $term = taxonomy_term_load($tid);
    // dpm($term);

    // Always recalculate changefreq and changecount.
    $timestamps = db_query("
  SELECT n.changed
  FROM {node} n
  INNER JOIN {taxonomy_index} ti ON ti.nid = n.nid
  WHERE ti.tid = :tid
  ORDER BY n.changed DESC
  LIMIT 1
", array(':tid' => $tid))->fetchField();
    $link['changefreq'] = $term->tid ? xmlsitemap_calculate_changefreq($timestamps) : 0;
    $link['changecount'] = $term->tid && (count($timestamps) > 0) ? count($timestamps) - 1 : 0;
    $link['lastmod'] = count($timestamps) > 0 ? max($timestamps) : 0;
  }
}
?>

xmlsitemap.module строки с 1197 по 1207:

function xmlsitemap_get_chunk_size($reset = FALSE) {
  static $size;
  if (!isset($size) || $reset) {
    $size = xmlsitemap_var('chunk_size');
    if ($size === 'auto') {
      $count = max(xmlsitemap_get_link_count($reset), 1); // Prevent divide by zero.
      $size = min(ceil($count / 10000) * 5000, XMLSITEMAP_MAX_SITEMAP_LINKS);
    }
  }
  return $size;
}

$link['lastmod'] = $timestamps ? $timestamps : 0;
вместо
$link['lastmod'] = count($timestamps) > 0 ? max($timestamps) : 0; попробуй

Помогло, стало обновляться!!!!!!!!! Ура!!
только при изменении термина пишет ошибку:
Warning: sort() expects parameter 1 to be array, string given в функции xmlsitemap_calculate_changefreq() (строка 1230 в файле /home/***/sites/all/modules/xmlsitemap/xmlsitemap.module).

вот строки xmlsitemap.module 1229-1239

function xmlsitemap_calculate_changefreq($timestamps) {
  sort($timestamps);
  $count = count($timestamps) - 1;
  $diff = 0;

  for ($i = 0; $i < $count; $i++) {
    $diff += $timestamps[$i + 1] - $timestamps[$i];
  }

  return $count > 0 ? round($diff / $count) : 0;
}

а еще не обновляется 1 термин, я когда своими кривыми руками ползал по базе SQL через PHPmyadmin, то тиснул кнопку "Изменить" в таблице xmlsitemap на этом термине. Пробовал поменять lastmod, сохранил. теперь у него стоит статус override=1, а у всех остальных терминов стоит 0. и теперь этот один не обновляется в файле sitemap.xml не обновляется.
не подскажете, как это вылечить?
ошибка при изменении термина осталась в строке 1230 :(

$link['changefreq'] = $term->tid ? xmlsitemap_calculate_changefreq($timestamps) : 0;
$link['changecount'] = $term->tid && (count($timestamps) > 0) ? count($timestamps) - 1 : 0;

в таком случае не будут работать , так как $timestamps был массивом , а сейчас это просто значение времени последнего обновления поды , относящейся к данному термину

Короче, пусть ошибка выскакивает - пофиг, верно?)

надо добавить после
$timestamps = db_query("
SELECT n.changed
FROM {node} n
INNER JOIN {taxonomy_index} ti ON ti.nid = n.nid
WHERE ti.tid = :tid
ORDER BY n.changed DESC
LIMIT 1
", array(':tid' => $tid))->fetchField();
ещё
$timestamp = termlastmod_term_get_timestamps($term);

и поменять
$link['changefreq'] = $term->tid ? xmlsitemap_calculate_changefreq($timestamps) : 0;
$link['changecount'] = $term->tid && (count($timestamps) > 0) ? count($timestamps) - 1 : 0;
на
$link['changefreq'] = $term->tid ? xmlsitemap_calculate_changefreq($timestamp) : 0;
$link['changecount'] = $term->tid && (count($timestamp) > 0) ? count($timestamp) - 1 : 0;

Николай
15.03.2012, 19:35

Здравствуйте.

Сейчас все ссылки на скачивание прикрепленного файла имеют разное название в зависимости от имя файла, пример: "file_name.zip"

Как изменить название ссылки на "Download" и вывести рядом размер файла в Drupal 7?

Здравствуйте, помните я доставал своими вопросами о том, что One Click Upload не работает? Потом сообщил, что и вовсе не работает загрузка файлов.

Сегодня нашел такую же ситуацию у другого человека.

У меня tmp файл находится в files/default/tmp, а upload_tmp_dir указан в пхп другой. Из-за этого у меня ошибка? Теперь только тех. поддержка хостинга поможет?

Теперь только тех. поддержка хостинга поможет?

скорей всего

Нет, решил сам. Кажется open_basedir не работал так, как надо.

upload_tmp_dir /var/www/v-3ххх/data/mod-tmp /tmp

Указал полный путь, т.е. local value, а не master value - сработало - алилуя.
Спасибо. Пошел тестить ocupload.

Затестил, работает, СПАСИБО!!!!!
но вот только обновляется теперь лишь термин, привязанный к ноде. А в словаре есть еще родители + главная страница сайта сделана термином. как родителей и гл. страницу (к ноде не привязанную) обновить?

т.е. в адресе типа http://ogogo.us/epepe/gogo/obzor_buldozera обновляется сама статья obzor_buldozera и термин gogo. ерере остается без изменений ровно как и гл страница сайта с синонимом frontpage.

Добрый вечер, у меня задача выводить ноды по запросу номера из чека, нужно два поля "Штрих кож" и код операции и что при вводе и по нажатю кнопки применить попадали на помеченную ноду, может есть модуль который подставляет адресс ноды в поле, а к ноде уже присваивать айди как адресс ?

Андрей
17.03.2012, 02:09

Как у вас реализован вывод кол-ва нод в каждой категории? Может урок где-нибудь есть по этому?

Андрей
17.03.2012, 02:36

Спасибо :)
У меня ещё вопрос, а что-нибудь страшное случится, если я удалю из базы стандартное меню navigation?

вручную из базы лучше ничего не удалять

Андрей
17.03.2012, 02:42

А как-то по другому можно сделать?

Андрей
17.03.2012, 02:46

Мешает, всё время перед глазами маячит

Андрей
17.03.2012, 15:51

эту я статью видел, 70% она объясняет, по правде мне интересна реализация фильтрации по нажатию на плюсик

Андрей
17.03.2012, 16:07

и ещё вопрос мучает, там один словарь или несколько? :)

про меня забыли с моими терминами и вьюсами на них :(

Как с помощью Views обрезать текст, чтобы в конце ставилась троеточие?

* в конце добавлялось многоточие

Как с помощью Views обрезать текст, чтобы в конце ставилась троеточие?

включить соответствующую опцию в настройках поля

там один словарь или несколько?

несколько

Андрей
18.03.2012, 16:35

а можете рассказать по шагам, как вы делали это меню? Начиная от построения и заканчивая фильтрацией по плюсикам?

у меня почти все разделы сайта на вьюхах сделаны. это плохо или нет?

Андрей
18.03.2012, 18:01

Опережая мой коммент, хочу сказать, что с частью настройки меню разобрался, остаётся вопрос с фильтром по плюсику :)

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

нашел taxonomy display, но он на весь словарь распространяется...

Есть значение кастомного поля термина, как получить сам термин (tid, например)? И можно ли, зная id термина, вывести ссылку-алиас на него?

drupal_get_path_alias нагуглил, пардон. По первому вопросу пока непонятно.

а можете рассказать по шагам, как вы делали это меню? Начиная от построения и заканчивая фильтрацией по плюсикам?

построение, фильтрация

у меня почти все разделы сайта на вьюхах сделаны. это плохо или нет?

к чему этот вопрос?

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

http://drupal.org/node/1089656#page-suggestion

Есть значение кастомного поля термина, как получить сам термин (tid, например)?

сделать запрос в базу

Спасибо.
Не знаете как работает Views PHP? В частности как из value code передать переменные в output code?

нашел,
simple example that prints "hello world" for Global PHP field
value code: (don't use php delimiters)

$result = " world"; 
//php code
// ...
return $result; 
//variable name can be anything

output code: (Use php delimiters)

hello <?php print $value; ?>
//$value always holds what is returned by value code
Алекс
19.03.2012, 20:37

Добрый день. Не могли бы вы мне помочь в таком вопросе?
Я делаю листалку для нод (типа prev/next).
Есть категории, и мне нужно чтобы переходя ссылкам (next/prev) в ноде(мы могли листать только те ноды , которые относятся к данной категории, а не все подряд).
вот пример кода
function next_page_link($node){

$next_nid = db_query("
SELECT node.nid FROM {node} as node INNER JOIN {taxonomy_index} as ti ON node.nid = ti.nid
WHERE node.created > :created AND node.type = :type AND node.status = 1
ORDER BY node.created DESC
LIMIT 1",
array(':created' => $node->created,':type' => $node->type,':tid'=>$term->tid))
->fetchObject();

if($next_nid) {
return '/'.drupal_get_path_alias('content/'.$next_nid->nid);
}
else {
return false;
}
}

Вопрос в том что мне нужно в ':tid'=>... передать термин id (тоесть термины которые относятся к данной ноде), я новичок в друпале, просто не знаю как это сделать, как вытащить tid ноды для данного случая.
Благодарю за ответ.

Алекс
20.03.2012, 00:20

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

для того, чтобы узнать структуры ноды и вытащить из неё tid

Алекс
20.03.2012, 00:30

Спасибо большое буду пробовать)

<a href="<?php $website=isset($data->_field_data) ? $data->_field_data['nid']['entity']->field_sponsor_website['und'][0]['value'] : NULL; print $website; ?>">Website</a>
код в Views PHP.
все работает, только вот одна ошибка выходит:

Notice: Undefined index: und в функции __lambda_func() (строка 1 в файле /home/adis/open/futsal/sites/all/modules/views_php/plugins/views/views_php_handler_field.inc(202) : runtime-created function).

как решается, незнаете?

решил проблему самостоятельно. надо было сделать так:

$website=isset($data->_field_data['nid']['entity']->field_sponsor_website['und'][0]['value']) ? $data->_field_data['nid']['entity']->field_sponsor_website['und'][0]['value'] : NULL; print $website; ?>

HarryAscent
21.03.2012, 00:13

Здраствуйте, мне нужно связать 2 или более словарей, при добавлении ноды. Допустим есть словарь, запчасти разбитый на более подробные внутренние части(Двигатель, АКПП, Кузов) авто и словари автомобили, самолеты, мотоциклы так - же разбитые на марки.
Так вот вопрос, как мне сделать так, чтобы не было сыр бора при выборе например Запчасти --> АКПП не было выбора Самолетов и Мотоциклов а только относящийся словарь Автомобили как связать 2 словаря? C помощью Hierarchical Select можно связать только термины а хотелось бы сделать так же но со словарями, подскажите как это реализовать?
Спасибо.

Станислав
21.03.2012, 02:07

Подскажите, с помощью чего (моды, настройка views и т.п.) можно реализовать динамический выбор терминов таксономии при создании ноды как, например, на http://start.vn.ua/node/add/advert ?
Насколько я понял, нода используется одна, а вот поля генерируются с учетом предыдущего выбора с помощью AJAX...

HarryAscent
21.03.2012, 14:01

Поставил модуль разобрался с использованием, но есть одна проблемка, при добавлении полей в ноду делаю их обязательными для заполнения, подключаю с помощью условия в Conditional Fields. Начинаю проверять на вывод ошибок если поле не заполнено, заполняю первое поле, вылазиет второе поле(Обязательное для заполнения) связанное с первым но его не трогаю. Создаю ноду ошибок не вылазиет и нода добавляется. :(
Что делать? где искать ошибку?

Станислав
22.03.2012, 02:48

Тоже установил модуль conditional fields, таких проблем как у товарища выше пока не обнаружил, все вроде как грамотно выводится в соответствии с заданными зависимостями, однако есть своего рода проблема:
тестировал на Denver, нода сохраняется со всеми заданными параметрами правильно, но при сохранении и редактировании вылазиют ошибки вида:
Ссылка на ошибки
Да и модуль heretical select при создании ноды с установленной с помощью conditional fields зависимостью для подконтрольного поля выкидывает ошибки вида:
Сделан недопустимый выбор. Пожалуйста, обратитесь к администратору сайта.
хотя при редактировании уже созданной ноды такого эффекта с ошибкой выбора heretical select не наблюдается...
Не подскажете, где может быть загвоздка?

Гость
23.03.2012, 17:18

Здравствуйте.

Подскажите пожалуйста какой-нибудь модуль, который расширяет стандартные профили друпала и еще модуль чата. Общий чат на около 50 человек логин в него с помощью стандартной авторизации друпала.

Спасибо.

Гость
24.03.2012, 04:50

А какой у Вас стоит модуль комментов?

Володя
24.03.2012, 11:40

подскажите, а вывод такой структуры с помощью третьих вьюсов, сделать реально?

<li><img картинка термина 1 /> термин 1 (без ссылки)</li>
	<ul>
	<li>статья 1, на тему термина 1 (ссылка)</li>
	<li>статья 2, на тему термина 1 (ссылка)</li>
	<li>статья 3 на тему терминов 1 и 2 (ссылка)</li>
	</ul>

<li><img картинка термина 2 /> термин 2 (без ссылки)</li>
	<ul>
	<li>статья 4, на тему термина 2 (ссылка)</li>
	<li>статья 3 на тему терминов 1 и 2 (ссылка)</li>
	</ul>

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

HarryAscent
26.03.2012, 10:16

Так не подскажите как мне решить мою проблему с валидацией в Conditional Fields?

Гость
28.03.2012, 02:14

Hello! Помогите, пжл. На странице ноды выводится View ( 3 анонса). Надо исключить из вьюхи анонс этой же ноды. пасиб

добавьте контекстный фильтр по nid с опцией exclude

Гость
28.03.2012, 04:19

Спасибо, МУЖИК! Как всегда, помог!!!

Гость
28.03.2012, 04:23

Тогда еще 2 вопроса, буду благодарен :)
использую дисплей сьют с 8 полями для вывода содержимого. Как туда вточить кодом без модулей вывод предыдущей и следующей ноды одного термина словаря (несколько уровней).
и как в этот же дисплей впиндюрить кодом сслыки на самые читаемые статьи. Сколько не мучался, так и не вышло. ПХП-фильтр включил, добавляю через эдд код филд. И нифига :(

Гость
28.03.2012, 04:49

=\ скорее всего, я просто не умею вставлять код нормально иззп незнания пхп :(

тут образец

Добавить комментарий