lena_elena4: Блог

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

Парсер погоды в блоке

31 августа 2009 в 23:32

Через админку создаю новый блок, вставляю в него следующий код:

<?php
$cast = 0;

function start_element($par, $name, $atr){
        global $heap, $cast;
               if($name == 'FORECAST'){
                $heap[] = array('date' =>$atr);
                $cast = 1;
                }
                else if($cast)
                $heap[count($heap)-1][$name]=$atr;
}

function end_element($par, $name){
  global $cast,$heap;
        if($name == 'FORECAST')
        $cast = 0;
        /*print '<pre>';
        print_r($heap);
        print '</pre>';
*/

}

$data = file_get_contents('http://informer.gismeteo.ua/xml/33345_1.xml');

if(!empty($data)) {
$XMLparser = xml_parser_create();
xml_set_element_handler($XMLparser, 'start_element', 'end_element');
if (!xml_parse($XMLparser, $data)) {
        die(sprintf("XML error: %s at line %d",
                    xml_error_string(xml_get_error_code($xml_parser)),
                    xml_get_current_line_number($xml_parser)));
    }

$n = count($heap);
for ($i=0; $i<$n; $i++){
        print $heap[$i]['date']['MONTH'];
}              
xml_parser_free($XMLparser);
}
?>

Ставлю формат php-кода.
В итоге на странице - пусто и ошибок никаких нет.
Через file_get_contents файл точно грузится, делала print_r($heap) - массив, в который собираю элементы xml-файла, выводится полностью весь массив, все элементы на месте.
Пробую print $heap[$i]['date']['MONTH']; - результирующий код такой

                        <h4>Погода</h4>
               
        <div class="content"></div>

Форма в блоке

31 июля 2009 в 17:31

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

Радиокнопки

26 июля 2009 в 22:19

Есть форма:

function poll_form($node){
//print_r($form);
$options = array('0' => t('Политика'), '1' => t('Бизнес'), '2' => t('Общество'), '3' => t('Культура'), '4' => t('Книжные новости'), '5' => t('Новости

спорта'

));

  $form['quest'] = array(
    '#type' => 'radios',
    '#title' => '',
    '#options' => $options,
    '#prefix' => '<div id = "poll">' . t('Какие новости вам интересны?'),
    '#suffix'=> '</div>',
     
  );
$form['submit'] = array(
  '#type' => 'submit',
  '#value' => t('Мой голос'),
);

return $form;
}

Есть ее обработчик:

function poll_submit($form, &$form_state){
db_query("UPDATE {poll_thems} SET count=count+1 WHERE title_poll =  '%s'", $form_state['values']['quest']);
$form_state['redirect'] = 'poll_result';
}

Ясное дело, обработчик написан криво. Не знаю, как в Друпале передаются значения радиокнопок.
Вот, например,

<?php<input type="Radio" value="m" name="poll">Политика<br> 
<input type="Radio" value="f" name="poll">Бизнес<br>?>

Как здесь передать в базу параметр value? Как это правильно в Друпале делается?

Проблема с путями

19 июля 2009 в 14:05

Помогите, пожалуйста, не пойму, в чем дело.
Запрашиваю файл - пишет, что файл не найден.
Права на файл - 777
Права на папку, где лежит файл - 755
Путь строится верный, распечатывала, проверяла.
Ни на локалхосте, ни на сервере не работает.
В чем еще может быть дело?

function library_form_submit($form, &$form_state) {
ob_start();
$filename = file_create_url('diff.txt');
if (!file_exists($filename)) drupal_set_message('Файл '  . $filename . ' не найден');
drupal_set_header("Content-Type: text/plain");
drupal_set_header("Content-Length: " . filesize($filename));
drupal_set_header("Content-Disposition: attachment; filename=" . $filename);
$fp = fopen($filename, 'r');
flock($fp, LOCK_EX);
$read = fread($fp, filesize($filename));
echo $read;
$ob = ob_get_contents();
flock($fp, LOCK_UN);
fclose($fp);
ob_end_clean();
return print $ob;
}

Файл не найден

19 июля 2009 в 0:47

Помогите, пожалуйста, не пойму, в чем дело.
Запрашиваю файл - пишет, что файл не найден.
Права на файл - 777
Права на папку, где лежит файл - 755
Путь строится верный, распечатывала, проверяла.
В чем еще может быть дело?

function library_form_submit($form, &$form_state) {
ob_start();
$filename = file_create_url('diff.txt');
if (!file_exists($filename)) drupal_set_message('Файл '  . $filename . ' не найден');
drupal_set_header("Content-Type: text/plain");
drupal_set_header("Content-Length: " . filesize($filename));
drupal_set_header("Content-Disposition: attachment; filename=" . $filename);
$fp = fopen($filename, 'r');
flock($fp, LOCK_EX);
$read = fread($fp, filesize($filename));
echo $read;
$ob = ob_get_contents();
flock($fp, LOCK_UN);
fclose($fp);
ob_end_clean();
return print $ob;
}

Не работают ссылки на сайте

15 июля 2009 в 12:39

Перенесла сайт на хостинг. Не работает ни одна ссылка, хотя в папку хостера залила все правильно и из базы материал выбирается.
Сейчас вот это все выглядит вот так: http://bukva.hmarka.net/
Проблем много, по ходу дела буду разбираться.
Подскажите, пожалуйста, в чем причина и как ее устранить?

Где в базе лежат ссылки меню?

14 июля 2009 в 15:31

На локалхосте было все нормально. Выложила сайт на сервер - вывелось все, кроме ссылок меню. Где они в базе лежат? Чтобы проверить, как импортировался дамп.

Архив через views

12 июля 2009 в 21:06

Установила Поля в Материал: Link, но все ссылки на ноды определенного месяца теперь выводятся так:
вид
вид
вид
вид
и т.д.
Где нужно написать, чтобы ссылка = названию ноды? Чтобы кликаешь по названию месяца - и список названий нод.

Какая функция отвечает за вывод?

7 июля 2009 в 9:59

Подскажите, пожалуйста, какая функция в Друпале отвечает за вывод уже в броузер?
Например, создала я модуль, в нем есть хук, который строит блок, в блоке прописываю теги, эти теги при выводе на страницу тупо удаляются. Вот я и хочу посмотреть, какая функция отвечает за вывод. Надо, наверное, в common.inc и ему подобных искать?

В одном модуле использовать колбэки из другого модуля

5 июля 2009 в 22:47

Допустим, в одном модуле я определяю колбэки меню:

function our_author_menu() {

$items['library/%/%'] = array(
'title' => 'My title',
'title callback'=> 'our_author_title_callback'
'page callback' => 'our_author_article',
'page arguments' => array(1,2),
'access callback' => TRUE,
'type' => MENU_CALLBACK,
);
}
return $items;
}

Здесь в колбэке заголовка и колбэке страницы я хочу использовать те функции, которые определены в другом модуле:
library_title_callback и library_article, т.е. должно быть что-то типа:
$items['library/%/%'] = array(
'title' => 'My title',
'title callback'=> library_title_callback'
'page callback' => library_article',
'page arguments' => array(1,2),
'access callback' => TRUE,
'type' => MENU_CALLBACK,
);
}
return $items;
}
МОжно ли эти функции вызвать из другого модуля? Заранее спасибо.

Не выводится флеш

4 июля 2009 в 0:14

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

<object id="FlashID" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width=100% height="80" border = "1px solid black">
  <param name="movie" value="<?php print drupal_get_path('theme', 'delicious_fruit') .'/Movie.swf'?>" />
  <param name="quality" value="high" />
  <param name="wmode" value="opaque" />
  <!--[if !IE]>-->
  <object type="application/x-shockwave-flash" data="<?php print drupal_get_path('theme', 'delicious_fruit') .'/Movie.swf'?>" width=100% height="80">
    <param name="quality" value="high" />
    <param name="wmode" value="opaque" />
    <!--[if !IE]>-->
  </object>
  <!--<![endif]-->
</object>

И в хедере вызов:

<script type="text/javascript">
<!--
swfobject.registerObject("FlashID");
//-->
</script>

Блок в две колонки

29 июня 2009 в 0:12

Подскажите, пожалуйста вот в чем.
Есть блок, состоящий из двух частей ($delta = 0 и $delta = 1), мне нужно вывести в две колонки, в одной колонке - содержимое $delta = 0, во второй содержимое $delta = 1.
Создала файл шаблона block-news.tpl, прописала в нем таблицу на две колонки, но почему-то все равно один блок располагается под другим, а не рядом.

<div id="block-<?php print $block->module .'-'. $block->delta; ?>" class="block block-<?php print $block->module ?> unstyled-block">
<table>
<?php $i = 0; ?>
        <?php if(!($i%2)): print '<tr>'; endif;?>
        <td>
        <?php if ($block->subject): ?>
                <h4><?php print $block->subject; ?></h4>
        <?php endif;?>
        <div class="content"><?php print $block->content ?></div>
        </td>
        <?php if(!($i+1%2)): print '</tr>'; endif;?>
        <?php $i++; ?>
        </table>
</div>

Своя капча

11 июня 2009 в 12:00

Помогите, пожалуйста, второй день уже бьюсь.
Хочу написать капчу, не знаю, как в форме в изображении передать src.
Как в Друпале сделать динамический src в картинке.
Делаю так:

function mycaptcha_book_form($node){
$res['mycaptcha_image'] = array(
'#value' => '<img src="'. check_url(url("captcha")) .'" alt="'. t('Image CAPTCHA') .'" title="'. t('Image CAPTCHA') .'" />',
'#weight' => -1,
);
//ну и так дальше форма...

А как передать на страницу?
Пишу в хуке меню:
function mycaptcha_menu() {
$items = array();
//страница, на которой форма + капча
$items['library/%/%/%'] = array(
'title' => 'Ваша книга',
'title callback' => 'mycaptcha_info_book_title_callback',
'description' => 'Скачиваем книгу',
'page callback' => 'mycaptcha_info_book',
'page arguments' => array(1,2,3,4),
'access callback' => TRUE,
'file' => 'mycaptcha_book.inc',
'type' => MENU_CALLBACK
);
//колбэк для генерации капчи
$items['captcha'] = array(
'file' => 'mycaptcha_number.inc',
'page callback' => 'mycaptcha_number',
'access callback' => TRUE,
'type' => MENU_CALLBACK,
);

'mycaptcha_number' - генератор картинки. Не получается связать форму, которая на странице с самой капчой. Помогите, пожалуйста

Модуль и шаблон

2 июня 2009 в 10:13

Помогите, пожалуйста.
Делаю домашнюю страничку.
В модуле прописываю функцию, которая выводит блоки категорий и подкатегорий к данной категории.

function homepage_category() {
$content = '';
$vid = 9;
$res = db_query('SELECT tt.name, tt.tid
                    FROM {term_data} tt
                    LEFT JOIN {term_hierarchy} th  
                    ON tt.tid = th.tid                  
                    WHERE vid = %d AND th.parent = %d'
, $vid,0);  
if(!$res) return drupal_not_found();
  while($title = db_fetch_object($res)) {
  $ttid = $title->tid;
  $tname = $title->name;
  $content['main']['tname'][] = $tname;
  $content['main']['ttid'][] = $ttid;
                    $sql='SELECT td.name, td.tid
                          FROM {term_data} td
                          LEFT JOIN {term_hierarchy} th  
                          ON td.tid = th.tid
                          WHERE td.vid = %d AND th.parent = %d'
;
                    $res1 = db_query($sql,$vid,$title->tid);  
                    if(!$res1) return drupal_not_found();
                      while($sub_title = db_fetch_object($res1)){
                        $sub_t = $sub_title->tid;
                        $sub_n = $sub_title->name;
                        $content['sub']['sub_t'][] = $sub_t;
                        $content['sub']['sub_n'][] = $sub_n;                          
                      }
  }
//$content = theme(homepage_ann,$content);
return !empty($content) ? $content : 'Переменные';
}

Дальше делаю шаблон node-front.tpl.php

ФСК и стили

28 мая 2009 в 15:42

Помогите, пожалуйста.
При подключении ФСК в странице добавления материалов Body уменьшается вдвое. Скрин прикрепила.
Где подправить стили, чтобы все было нормально? Из-за чего это происходит?

вывод через theme_

13 мая 2009 в 17:47

Помогите, пожалуйста. Без темы выводится, с темой не хочет.

function guidebook_nodeapi(&$node, $op, $teaser, $page) {
  if ($node->type == 'page') {
    if ($op == 'view' )
      guidebook_view($node, false, true);
  }
}

function guidebook_view($node, $teaser = FALSE, $page = FALSE) {
  $node->content['guidebook'] = array(
    '#value' =>  theme('guidebook_teas',$node),
    '#weight' => 1,
  );

  return $node;
}

function guidebook_theme() {
  $theme_func = array(
  'guidebook_teas' => array(
    'arguments' => array('content' => NULL),
    ),
  );
  return $theme_func;
}

theme_guidebook_teas($content){
$tcontent = '';
$tcontent = '<div class = "gheader">' . $content['header'] . '</div>';
$tcontent. = '<div class = "gpage_content">' . $content['page_content'] . '</div>';
return $tcontent;
}

Нужно вывести массив, который возвращается из функции:

function guidebook_ts($tid) {
  $tid = (int)$tid;
 //запрос в базу, $result

  $pcontent = array();
  while ($ts = db_fetch_object($result)) {
  $header_content = l($ts->nt,"guidebook/$ts->tt/$ts->nn") . '<br />';
  $page_content  = $ts->nteas . '<br />';
  $pcontent['header'][] = $header_content;
  $pcontent['page_content'][] = $page_content;
  }
//print_r($pcontent);
return !empty($pcontent) ? $pcontent : 'Приносим извинения. Данный раздел находится в стадии разработки';
}

Добавить в форму свои поля

20 апреля 2009 в 18:29

Мне нужно в стандартную форму добавления ноды добавить свои поля.
Делаю вот так:

function library_form_alter(&$form, $form_state, $form_id) {
if ($form_id == 'library_node_form') {
$form['#attributes'] = array('enctype' => "multipart/form-data");
  $form['upload'] = array(
  '#type' => 'file',
  '#title' => t('Upload'),
  '#size' => 40,
);
$form['author'] = array(
//параметры поля
  );
$form['zanr'] = array(
//параметры поля
  );

$form['#validate'] = 'library_add_form_validate';
}
}

Вызываю форму:

function library_form($node){
return drupal_get_form('library_form_alter',$node);
}

В меню указываю путь:

    $items['node/add/library'] = array(
    'title' => '',
    'page callback' => 'library_form',
    'page arguments' => array(&$form, $form_state, 'library_node_form'),
    'access callback' => TRUE,
    'file'=>'library.add.inc',
    'access arguments' => array('add', $node ,$account = NULL),
    'type' => MENU_LOCAL_TASK
    );

Пишет warning: Missing argument 3 for library_form_alter() in . Не "доходит" id формы. Как это id можно посмотреть?

Связать шабон с модулем.

30 марта 2009 в 14:15

Есть кусок html-кода. Помещаю его в файл themes/my_theme/breadcrumb.tpl.php. В модуле определяю контент($breadcrumb) для этого куска html-кода, и как теперь в Drupal 6 дать понять модулю, что контент должен выводиться с этой темой?

Вывод ссылок

24 марта 2009 в 23:19

В модуле определяю ссылки:

function library_link($type, $node = NULL, $teaser = FALSE) {  
$links = array();
$content = '';  
  if($node->type == 'library') {
    if (user_access('create library')) {
      $links[] = l(t('Add'), "library/add", array('title' => t('Add a new library')));
          $links .= theme('t_library_link',$links);
    }
    if (user_access('update library')) {
       
      $links[] = l(t('Edit library'), "library/" . arg(1) . "/" . arg(2) . "/edit", array('title' => t('Edit library') . $node->title));
      $links[] = l(t('Delete library'), "library/" . arg(1) . "/" . arg(2) . "/delete", array('title' => t('Delete library') . $node->title));
      $links .= theme('t_library_link',$links);
        }
  }
return $links;
}

там же функция, которая выводит ссылки:

function t_library_link($list) {
  $cont = '';
  foreach ($list as $list_item) {
    $cont .= $list_item.'|';
  }
  return $cont;
}

В node-library.tpl делаю вывод: print $links
Разрешения есть, но на странице - пусто. Что делаю не так?

Просьба помогать только если есть желание(от "-" пользы мало).

Правильная обработка $_GET-запроса

16 марта 2009 в 15:55

Ссылки в меню - термины одного словаря.
При нажатии на ссылку должны вывести "подтермины", родитель которых - пункт меню.
Не пойму, почему у меня не показывается страница, на которой должны появиться "подтермины".
Я так думаю, причина в неправильной передаче $_GET-параметров.

//Меню
function library_menu() {
  $items = array();
  $items['taxonomy/term/%term'] = array(
  'title' => t('Литература'),
  'description' => t('Выводим все ссылки'),
  'page callback' => 'author',
  'access callback' => TRUE,
  'type' => MENU_CALLBACK
  );
return $items;
}

//callback-функция
function author() {
$term = isset($term) ? intval(arg(2)) : 0;
  $page_content = '';
  $content = db_query("SELECT td.name FROM {term_data} td
    INNER JOIN {term_hierarchy} th
        ON td.tid = th.tid WHERE th.parent = $term"
);
  if(!$result) _db_error_page($error = 'Error in $sql');
  while ($links = db_fetch_object($content))
   $page_content .= l(htmlspecialchars($links->title),"node/$links->nid") . '<br />';
  //проверяем, есть ли контент
  if ($page_content != ''){
  //отобразить страницу
  return $page_content;
  }
}

Отладка в Друпале

15 марта 2009 в 0:03

Меня интересует, как происходит процесс отладки в Друпале.
Если у меня в модуле ошибка, появляется 500 заголовок: Внутренняя ошибка сервера, я, получается, вообще не могу зайти ни на индекс-страницу, ни в админку.
Что делаю. Беру проблемный модуль, выбрасываю его временно из папки модулей, захожу в логи, смотрю, какая ошибка, исправляю ошибку, снова вставляю папку с модулем в sites/all/modules, пробую зайти на домашнюю страничку.
Мне кажется, надо делать не так.
Поделитесь, пожалуйста, опытом, как можно работать над ошибками, не трогая папку с модулем.