как изменить Random image ? [РЕШЕНО]

Главные вкладки

Аватар пользователя staryi@drupal.org staryi@drupal.org 22 июня 2009 в 3:41

Вопрос к людям хорошо знающим php и особенности друпал, как сделать чтоб в блоке random image выводилось 2 картинки ? ПО форуму поискал ничегго не нашел, блок как я понял формируется в коде

<?php
 
if (user_access('access content')) {
        switch (
$delta) {
          case 
0:
            
$images image_get_latest();
            
$block['subject'] = t('Latest image');
            
$block['content'] = theme('image_block_latest'$imagesIMAGE_THUMBNAIL);
            break;
          case 
1:
            
$images image_get_random();
            
$block['subject'] = t('Random image');
            
$block['content'] = theme('image_block_random'$imagesIMAGE_THUMBNAIL);
            
          break;
?>

Пробовал изменить вот так

<?php if (user_access('access content')) {
        switch (
$delta) {
          case 
0:
            
$images image_get_latest();
            
$block['subject'] = t('Latest image');
            
$block['content'] = theme('image_block_latest'$imagesIMAGE_THUMBNAIL);
            break;
          case 
1:
            
$images image_get_random();
            
$block1['subject'] = t('Random image');
            
$block1['content'] = theme('image_block_random'$imagesIMAGE_THUMBNAIL);
            
$images2 image_get_random();
            
$block2['subject'] = t('Random image');
            
$block2['content'] = theme('image_block_random'$images2IMAGE_THUMBNAIL);
            
$block$block1 "&nbsp"$block2 ;

          break;

?>

Блок вообще епрестает работать, может кто нить подсказать ?

Комментарии

Аватар пользователя staryi@drupal.org staryi@drupal.org 22 июня 2009 в 5:53

К сожалению поиск не дал мне ответов на вопросы по изучению theme('image_block_random', $images, IMAGE_THUMBNAIL);, может кто нить дать наводку на нормальный материал (желательно на русском) или что нибудь рассказать о это функции и о рецепте решения моей проблемы

Аватар пользователя glu2006 glu2006 22 июня 2009 в 11:43

<?php if (user_access('access content')) {
        switch (
$delta) {
          case 
0:
            
$images image_get_latest();
            
$block['subject'] = t('Latest image');
            
$block['content'] = theme('image_block_latest'$imagesIMAGE_THUMBNAIL);
            break;
          case 
1:
            
$images image_get_random();
            
$block['subject'] = t('Random image');
            
$block['content'] = theme('image_block_random'$imagesIMAGE_THUMBNAIL);
            
$images2 image_get_random();
            
$block['content'] += theme('image_block_random'$images2IMAGE_THUMBNAIL);
           break;
?>

А так работает?
ЗЫ...Править в коде модуля - "ЗЛО"!!! Smile

Аватар пользователя Nikit Nikit 22 июня 2009 в 11:48

посмотри как работает в модуле функция theme_image_block_random.
Переопределяется в темке сайта, поиск по: друпал тематизация

Аватар пользователя staryi@drupal.org staryi@drupal.org 23 июня 2009 в 5:17

2 glu2006, к содалению так тоде не работает, каким то образом видно получается что переменная $block получается пустая, так как блок вообше не появляется. Сейчас блок генерации модуля с твоим кодом выглядит так.

<?php
function image_block($op 'list'$delta 0) {
  switch (
$op) {
    case 
'list':
      
$block[0]['info'] = t('Latest image');
      
$block[1]['info'] = t('Random image');

      return 

$block;
    case 
'view':
      if (
user_access('access content')) {
      switch (
$delta) {
          case 
0:
            
$images image_get_latest();
            
$block['subject'] = t('Latest image');
            
$block['content'] = theme('image_block_latest'$imagesIMAGE_THUMBNAIL);
            break;
          case 
1:
            
$images image_get_random();
            
$block['subject'] = t('Random image');
            
$block['content'] = theme('image_block_random'$imagesIMAGE_THUMBNAIL);
            
$images2 image_get_random();
            
$block['content'] += theme('image_block_random'$images2IMAGE_THUMBNAIL);
           break;
        }
      }
      return 
$block;
  }
}
?>

но к сожалению не фурычит (

Аватар пользователя MrCowboy MrCowboy 28 июня 2009 в 3:42

тоже бьюсь над этой проблемой. только с latest image.
Вот нашел в файле модуля такую подсказку:

/**
* Fetch a random N image(s) - optionally from a given term.
*/
function image_get_random($count = 1, $tid = 0) {
if ($tid != 0) {
$result = db_query_range(db_rewrite_sql("SELECT DISTINCT(n.nid), RAND() AS rand FROM {term_node} tn LEFT JOIN {node} n ON n.nid = tn.nid WHERE n.type='image' AND n.status = 1 AND tn.tid = %d ORDER BY rand"), $tid, 0, $count);
}
else {
$result = db_query_range(db_rewrite_sql("SELECT DISTINCT(n.nid), RAND() AS rand FROM {node} n WHERE n.type = 'image' AND n.status = 1 ORDER BY rand"), 0, $count);
}
$output = array();
while ($nid = db_fetch_object($result)) {
$output[] = node_load(array('nid' => $nid->nid));
}
return $output;
}

только пока мне это мало чем помогло. продолжаю втыкать в код.

Аватар пользователя Nikit Nikit 30 июня 2009 в 6:33

Короче, склифосовский.
Смотрим модуль image, конкретно по тематизации:

/**
 * Theme a random block
 */

function theme_image_block_random($images, $size) {
  return l(image_display($images[0], $size), 'node/'. $images[0]->nid, array('html' => TRUE));
}

Соответственно, затемизируй эту функцию у себя, так чтобы рисовалось две:

function твоятема_image_block_random($images, $size) {
  return l(image_display($images[0], $size), 'node/'. $images[0]->nid, array('html' => TRUE)) . "какой-то разделитель" . l(image_display($images[1], $size), 'node/'. $images[1]->nid, array('html' => TRUE));
}

Сам добавь проверку того что рисунков больше одного.

Аватар пользователя staryi@drupal.org staryi@drupal.org 30 июня 2009 в 9:58

Спасибо большое.

Добавлю еще для тех кто будет решать такую же проблему, чтобы показывалось 2 разные фотографии, соотбетственно $images[0] и $images[1], нужно в функции function image_get_random установить параметр $count = 2, иначе у массива $images будет только значение в ячейке [0].

Вот код измененных функций.

<?php function theme_image_block_random($images$size) {
  return 
l(image_display($images[0], $size), 'node/'$images[0]->nid, array('html' => TRUE)) . " " l(image_display($images[1], $size), 'node/'$images[1]->nid, array('html' => TRUE));
}
?>

и

<?php function image_get_random($count 2$tid 0) {
  if (
$tid != 0) {
    
$result db_query_range(db_rewrite_sql("SELECT DISTINCT(n.nid), RAND() AS rand FROM {term_node} tn LEFT JOIN {node} n ON n.nid = tn.nid WHERE n.type='image' AND n.status = 1 AND tn.tid = %d ORDER BY rand"), $tid0$count);
  }
  else {
    
$result db_query_range(db_rewrite_sql("SELECT DISTINCT(n.nid), RAND() AS rand FROM {node} n WHERE n.type = 'image' AND n.status = 1 ORDER BY rand"), 0$count);
  }
  
$output = array();
  while (
$nid db_fetch_object($result)) {
    
$output[] = node_load(array('nid' => $nid->nid));
  }
  return 
$output;
}
?>
Аватар пользователя Nikit Nikit 1 июля 2009 в 6:41

Нет неправильно.
Я ок-ся недосмотрел, извиняюсь. В общем тут у них недоработка, можно было просто сунуть кол-во выводимых в админку, и выводить без гемора.

Не меняйте чужой код.

Просто создайте блок, вставьте такой код php:

$images = image_get_random(2,0);
print l(image_display($images[0], IMAGE_THUMBNAIL), 'node/'. $images[0]->nid, array('html' => TRUE));
print l(image_display($images[1], IMAGE_THUMBNAIL), 'node/'. $images[1]->nid, array('html' => TRUE));
Аватар пользователя Рад Рад 5 февраля 2010 в 6:48

Модуль Image изменили и теперь в блоке "Random image" или другой какой модуль за это отвечающий, можно выставлять число изображений.

Мой вопрос: как сделать определённого размера изображение выводимое в блоке.

Просьба если есть возможность написать код и куда его вводить, а не посылать рассматривать модули jQuery и другие, интересует тока модуль Image правка кода в самом модуле или в другом месте.

П.С. Почему в самом модуле, так потому что в блоке нельзя прописывать рнр коды и.д.

Заранее благодарю!