[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: нужно небольшое разъяснение)
zeromind
всем привет wink.gif
вообщем прошел все курсы я вплоть до регистрации..
есть main - модуль главной страницы(ПРИЧЕМ В НЁМ ТОЛЬКО ВЫВОД АНКЕТ ИЗ БД!!!), в нём я хочу отобразить анкеты.. при открытии каждой - естественно открываеться другой шаблон, более подробная информация (этот шаблон я сделал) всё получилось..
но + ко всему этому при открытии анкеты, я хочу прикрутить комментарии к анкете + (в дальнейшем галлерею)..
собственно вопрос: в одном модуле это можно и правильно будет всё совместить ? ) просто парсить инфу и вставлять переменные в шаблон ? и GET['news'] надо будет тогда приравнять к идентификатору в комментариях ? ) в БД при отправке контента надо будет отправлять GET['news'] в новое поле таблицы?? )



Спустя 42 минуты, 44 секунды (3.10.2011 - 15:29) neadekvat написал(а):
Нет, надо создать модуль комментариев, и его подключать из модуля новостей.
Ну, а на счет id новости - она то есть в любом случаи, раз уж новости выводятся как-то.

Спустя 5 часов, 58 минут, 56 секунд (3.10.2011 - 21:28) zeromind написал(а):
"свичу" содержимое контента в таком порядке:
 switch($GET['page'])  
{
case 'main':
include './modules/comments/read_controller.php';
include './modules/news/router.php';
include './modules/main/router.php';


1) где './modules/comments/read_controller.php'; - чуток измененный контроллер гостевой книги, а именно - в отправке комментария, в SQL запросе добавилось `model` = '". escapeString($GET['new']) ." - для каждой каждой новости свои комменты, в БД естественно поле добавил и поставил циферки..
ниже весь файл контроллера

/** 
* We connect a file of the MySQL functions
* Подключаем файл функций MySQL
*/

include './libs/mysql.php';

/**
* The data recording block
* Блок записи информации
*/

if($ok)
{
if(!$POST['value1'])
$info[] = 'Текстовое поле не заполнено.';

if(!$POST['value2'])
$info[] = 'Текстовая область не заполнена.';

if(count($info) == 0)
{
mysqlQuery("INSERT INTO `". IRB_DBPREFIX ."guest`
SET
`name` = '"
. escapeString($POST['value1']) ."',
`text` = '"
. escapeString($POST['value2']) ."',
`model` = '"
. escapeString($GET['new']) ."'"
);

reDirect();

}
}

else
$info[] = 'Напишите что нибудь';

/**
* The block of reading of the information
* Блок чтения информации
*/


include './libs/irb_paginator.php';
$paginator = new IRB_Paginator($GET['num'], IRB_NUM_POSTS);

$res = $paginator -> countQuery("SELECT * FROM `". IRB_DBPREFIX ."guest`
ORDER BY `id` ASC
WHERE `model` = "
.(int)$GET['news']);


$page_menu = $paginator -> createMenu();

$rows = '';

if(mysql_num_rows($res) > 0)
{
$cont = getTpl('guest/rows');
/**
* We connect a BB-decoder
* Подключаем BB-декодер
*/

include '/bbcode/irb_bbdecoder.php';

while($row = htmlChars(mysql_fetch_assoc($res)))
{
$row['date'] = formatDate($row['date'], false);
$row['text'] = createBBtags($row['text']);
$rows .= parseTpl($cont, $row);
}
}


2) в контроллере новостей, у меня два разных шаблона: 1- для всех новостей(обзор), 2 - для полной новости (расширенной версии, там своя верстка), т.е. имеем $news = parseTpl($tpl_main, $row); и $news .= parseTpl($tpl_rows, $row);
так вот, во второй шаблон, где расширенная версия туда мне и нужно добавить комментарии (спарсенная переменная $rows)+форму добавления, соответственно его я и дописываю(шаблон) примерно так:


<!-- ./skins/tpl/news/main.tpl begin -->

<
b>Имя:</b> <?=$tpl_name;?><br />
<
b>*:</b> <?=$tpl_age;?><br />
<
b>*:</b> <?=$tpl_growth;?><br />
<
b>*:</b> <?=$tpl_weight;?><br />
<
b>*:</b> <?=$tpl_online;?><br />
<
b>*:</b> <?=$tpl_nick;?><br />
<
b>*:</b> <?=$tpl_about;?><br />
<
b>*:</b> <?=$tpl_price;?><br />
<
b>*:</b> <?=$tpl_view;?><br />
<
b>Дата: </b><?=$tpl_date;?><br />

<?=$rows;?>
<div style="text-align:center;" >
<
form action="" name="post" method="post">
Имя:<br />
<
input name="form[value1]" style="border:1px solid" type="text" value="<?php echo $POST['value1'];?>"/><br />
<
img style="cursor:pointer" src="<?php echo IRB_HOST ?>bbcode/images/bold.gif" alt="Жирный" onclick="tag('','')">
<
img style="cursor:pointer" src="<?php echo IRB_HOST ?>bbcode/images/italics.gif" alt="Курсив" onclick="tag('','')">
<
img style="cursor:pointer" src="<?php echo IRB_HOST ?>bbcode/images/underline.gif" alt="Подчеркнутый" onclick="tag('','')">
<
img style="cursor:pointer" src="<?php echo IRB_HOST ?>bbcode/images/strikethrough.gif" alt="Зачеркнутый" onclick="tag('','')">
<
img style="cursor:pointer" src="<?php echo IRB_HOST ?>bbcode/smiles/ii.gif" onclick="tag('[:)]','')">
<
img style="cursor:pointer" src="<?php echo IRB_HOST ?>bbcode/smiles/(.gif" onclick="tag('[:(]','')">
<
img style="cursor:pointer" src="<?php echo IRB_HOST ?>bbcode/smiles/worry.gif" onclick="tag('[;)]','')">
<
img style="cursor:pointer" src="<?php echo IRB_HOST ?>bbcode/smiles/D.gif" onclick="tag('[:D]','')"><br />

Сообщение:<br />
<
textarea name="form[value2]" style="border:1px solid" id="mess" cols="40" rows="10"><?php echo $POST['value2'];?></textarea><br />
<
br />
<
input name="ok" type="submit" /> <br />
<
br />
</
form>
</
div>

<
div style="text-align:right"><a href="<?php echo $tpl_url; ?>"><?php echo $tpl_link; ?></a></div>
<!-- ./
skins/tpl/news/main.tpl end -->


так теперь показываю свой контроллер новостей:
/**
* We connect a file of the MySQL functions
* Подключаем файл функций MySQL
*/

include './libs/mysql.php';

/**
* We connect a BB-decoder
* Подключаем файл BB-декодер
*/

include './bbcode/irb_bbdecoder.php';

/**
* News line generation
* Генерация ленты новостей
*/



if(!empty($_SERVER['HTTP_REFERER'])
&&
trim($_SERVER['HTTP_REFERER'], '/') !== trim(IRB_HOST, '/')
&&
strpos($_SERVER['HTTP_REFERER'], 'main') === false)
{
$GET['news'] = 'all';
}

$tpl_rows = getTpl('news/rows');
$tpl_main = getTpl('news/main');
$news = '';

if(is_numeric($GET['news']))
{
/**
* News generation by id
* Генерация новости по id
*/


$res = mysqlQuery("SELECT `id`, `nick`, `name`, `price`, `age`, `weight`, `growth`, `online`, `about`, `view`,
DATE_FORMAT(`date`,'%d') AS `day`,
DATE_FORMAT(`date`,'%m') AS `month`,
DATE_FORMAT(`date`,'%Y') AS `year`
FROM `"
. IRB_DBPREFIX ."models`
WHERE `public` = 1
AND `id` = "
.(int)$GET['news']);



if (mysql_num_rows($res) > 0)
{
$row = mysql_fetch_assoc($res);

$row['date'] = $row['day'] . ' ' . $lang_month_string[$row['month']] . ' ' . $row['year'];
$row['nick'] = createBBtags($row['nick']);
$row['name'] = createBBtags($row['name']);
$row['price'] = (int)$row['price'];
$row['age'] = (int)$row['age'];
$row['weight'] = (int)$row['weight'];
$row['growth'] = (int)$row['growth'];
$row['online'] = createBBtags($row['online']);
$row['view'] = (int)$row['view'];
$row['about'] = createBBtags($row['about']);
$row['url'] = href('news=all');
$row['link'] = IRB_LANG_ALL_NEWS;

$news = parseTpl($tpl_main, $row);
}
else
{
header("HTTP/1.1 404 Not Found");
exit(file_get_contents(IRB_ROOT . '/404.html'));
}

}

else
{
$res = mysqlQuery("SELECT `id`, `date`,`nick`,`about`,
DATE_FORMAT(`date`,'%d') AS `day`,
DATE_FORMAT(`date`,'%m') AS `month`,
DATE_FORMAT(`date`,'%Y') AS `year`
FROM `"
. IRB_DBPREFIX ."models`
WHERE `public` = 1
ORDER BY `id` DESC
LIMIT "
. IRB_NUM_NEWS_MAIN);

if(mysql_num_rows($res) > 0)
{
while ($row = mysql_fetch_assoc($res))
{
$row['date'] = $row['day'] . ' ' . $lang_month_string[$row['month']] . ' ' . $row['year'];
$row['nick'] = htmlspecialchars($row['nick']);
$row['about'] = createBBtags($row['about'], false) . "...";
$row['url'] = href('news=' . $row['id']);
$row['link'] = IRB_LANG_FULL_NEWS;
$news .= parseTpl($tpl_rows, $row);
}
}

else
{
$news = IRB_LANG_NO_NEWS;
}

}


на первый взгяд, бросаеться include './libs/mysql.php'; второй раз поидее ненужно это делать? или подключение прошлое сбросилось?) вообщем сначала была у меня ошибка что функция mysqlQuery дважды вызываеться, поэтому я думаю тут её надо стереть..

ну вроде бы это и всё, далее контроллер main - там ничего причастного нету, а в виде, приложен шаблон на main/show.tpl который всё и выводит, в нём естественно только переменная[ b]$news[/b] ...


и это всё выдаёт ошибку -
2011-10-03 10:13:52 MySQL error:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE `model` = 0' at line 2
Query:
SELECT COUNT(*) AS `cnt`
FROM `guest`
ORDER BY `id` ASC
WHERE `model` = 0


почему в WHERE `model` = 0 - пишет 0, я же выбираю по (int)$GET['news']) - а он по умолчанию all, поэтому получаеться 0? UPDATE :убрал интеджер - теперь пишет вместо 0 - all, но ошибка такая же

и ещё вопрос, хотел переделать вывод новостей не по id, а по нику nick (в бд)..
так вот такая сложная конструкция для меня оказалась))
if(is_numeric($GET['news'])) - если тут на своё заменю что то вроде - if($GET['news'] == $row['nick'] то выше мне ещё нужен будет 1 коннект к базе, т.к. переменная эта ещё не известна, выборки из БД не было..
в SQL запросе естественно надо поменятьтак: AND `nick` = " .$GET['news']);
но вот только всё равно не помогает) как тогда сделать стандартную страницу-показа всех новостей..


что мне вообщем нужно тут отредактировать, чтобы всё организовать ?) помогите - провозился пол дня)) в понимании этого..
с мяня + в карму и благодарность)

Спустя 10 минут, 31 секунда (3.10.2011 - 21:39) neadekvat написал(а):
Первого вопроса не понял.
Во-первых, сначала WHERE, а потом ORDER BY.
Во-вторых, ты сам приводишь его к целочисленному виду.

Второй вопрос.
Нужно будет
 AND `nick` = '{$GET['news']}'")

Смотри на кавычки.

В остальном - меня не заставить столько кода читать.
Учись составлять вопрос кратко, описывая логику и сводя вставки кода к минимуму.

Спустя 14 минут, 4 секунды (3.10.2011 - 21:53) zeromind написал(а):
по второму вопросу:
только AND `nick` = '{$GET['news']}'") - не поможет, потому что условие стандартное(не менял с курса) составлено подругому, т.е. if(is_numeric($GET['news'])), если числа попадают в ссылку новости, то выводим ОДНУ эту новость(а не все)
а вот ниже ELSE - там и выводятся - все новости(списком)...
мне естественно нужны не числа, мне прийдется писать if($GET['news'] == $row['nick']) НО выше мне ещё нужен будет 1 коннект к базе, т.к. переменная эта ещё не известна, т.к. это самое начала кода)), и этим дело я думаю не ограничется)

Спустя 3 минуты, 19 секунд (3.10.2011 - 21:56) zeromind написал(а):
а по первому - действительно касяк - сначала WHERE потом ORDER BY..
вот ток конструкцию такую первый раз вижу -
$res = $paginator -> countQuery("SELECT * FROM `". IRB_DBPREFIX ."guest`   
WHERE `model` = "
.$GET['news']
"ORDER BY `id` ASC"
);

всё равно запрос не валидный)) но уже просто ошибка парс..

up:
$res = $paginator -> countQuery("SELECT * FROM `". IRB_DBPREFIX ."guest`   
WHERE `model` = "
.$GET['news']."
ORDER BY `id` ASC"
);


тоже ошибка)) чёто я совсем криворукий, пол дня за компом повлияло ))

Спустя 5 минут, 9 секунд (3.10.2011 - 22:01) imbalance_hero написал(а):
zeromind
include_once IRB_ROOT.'/libs/mysql.php';

Вид запроса:
SELECT
FROM
`JOIN
WHERE
GROUP
ORDER BY
LIMIT


Остальное слишком сумбурно, нет ЧЕТКИХ вопросов, печалька :(

Спустя 1 минута, 13 секунд (3.10.2011 - 22:03) imbalance_hero написал(а):
$GET['news'] -ЧИСЛО?
сделай `model` = '".(int)$GET['news']."'

Спустя 2 минуты, 28 секунд (3.10.2011 - 22:05) zeromind написал(а):
нееет, сейчас число, я же хочу изменить ссылку по названию новости - т.е. текст

Спустя 1 минута, 23 секунды (3.10.2011 - 22:06) imbalance_hero написал(а):
zeromind
is_numeric - проверку не делай.
При запросе к БД используй escapeString (если ещё не прошел функцию, то mysql_real_escape_string).

Спустя 2 минуты, 37 секунд (3.10.2011 - 22:09) zeromind написал(а):
про функцию это вкурсе (типо strip_tags, htmlspecialchar ток для mysql), и про проверку вкурсе, я ж говорю что её надо заменить и даже написал чем, ток там появляються другие проблемы... )

сейчас вообще запрос sql не могу четко написать (который выше с WHERE и ORDER BY) пишет ошибку..

даже в таком случае:
    $res = $paginator -> countQuery("SELECT * FROM `". IRB_DBPREFIX ."guest`   
WHERE `model` = "
.$GET['news']);

пишет ошибку:
2011-10-03 11:13:19 MySQL error:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 2

Query:

SELECT COUNT(*) AS `cnt`
FROM `guest`
WHERE `model` = all



File: Z:\home\localhost\www\core\libs\irb_paginator.php
Line: 102


в классе irb_paginator.php касяк? сделать без него чтоль

Спустя 1 час, 12 минут, 40 секунд (3.10.2011 - 23:22) zeromind написал(а):
убрал irb_paginator.php, теперь - ошибки:
1) РЕШЕНО без удаления irb_paginator.php (спасибо neadekvat'y )) всё оказалось просто))
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in Z:\home\localhost\www\core\modules\comments\read_controller.php on line 72
   include './libs/irb_paginator.php';   
$paginator = new IRB_Paginator($GET['num'], IRB_NUM_POSTS);

$sq = "SELECT * FROM `". IRB_DBPREFIX ."guest`
WHERE `model` = "
.$GET['news'];
$res = mysql_query($sq, IRB_CONNECT);


$rows = '';

if(mysql_num_rows($res) > 0)
{


далее при просмотре новости любой, всё отображаеться, но:
2)
Notice: Undefined variable: rows in Z:\home\localhost\www\core\libs\view.php(59) : eval()'d code on line 14

получается спарсенная переменная в контроллере комментариев - $rows,
её нельзя передать в другой контроллер? они же поидее взаимосвязаны, сначала читаеться 1ый контроллер (комментов), после новостей( но тут пишет, что переменная неопеределенна..)

в текст инпатах и ариа - ошибки заполненные текстом, данные которые передаються в POST
Notice</b>:  Undefined variable: POST in <b>Z:\home\localhost\www\core\libs\view.php(59) : eval()'d code</b> on line <b>18</b><br /><script language=JavaScript src='/denwer/errors/phperror_js.php'></script>

получаеться одна и таже ошибка? переменные не видяться из контроллера в контроллере? их что надо инициализировать как то?

3) при нажатии кнопки(отправки коммента) естественно функция проходит, коммент - отправляеться. НО в бд model приходит 0 (а в $GET['new'] - id новости), ещё раз напомню запрос sql -
mysqlQuery("INSERT INTO `". IRB_DBPREFIX ."guest`  
SET
`name` = '"
. escapeString($POST['value1']) ."',
`text` = '"
. escapeString($POST['value2']) ."',
`model` = '"
. escapeString($GET['new']) ."'"


вроде бы всё правильно, думаю это также взаимосвязано с ошибкой выше в 2 вопросе...!?

Спустя 1 час, 6 минут, 37 секунд (4.10.2011 - 00:28) imbalance_hero написал(а):
zeromind
Текст необходимо обрамлять кавычками: `text` = 'all' , видишь кавычки текста? Это ТОЛЬКО для цифр есть попустительство, как МОЖНО не использовать, но это лишь "МОЖНО" и лишь как "ПОПУСТИТЕЛЬСТВО".

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

$news .= parseTpl($tpl_rows, $row); - видишь, ты в функцию передаёшь $row, значит за пределами функции снова же у нас есть $row, $row['text'],$row['name'] и т.д. в зависимости от данных. Их и используй за пределами парсинга. У тебя матюкается именно на $rows, а не $row.

Может ячейка model у тебя имеет тип-данных int ? То есть Integer, число, а не varchar или text? Поэтому в БД и добавляется в ввиду отсутствия ЦИФР - 0.

Спустя 15 часов, 44 минуты, 47 секунд (4.10.2011 - 16:13) zeromind написал(а):
вообще беда, парсинг из комментов убрал:
    /** тут у меня sql запрос на выборку данных..
*/

if(mysql_num_rows($res) > 0)
{

/**
* Подключаем BB-декодер
*/

include_once '/bbcode/irb_bbdecoder.php';

while($comm = htmlChars(mysql_fetch_assoc($res)))
{
$comm['date'] = formatDate($comm['date'], false);
$comm['text'] = $comm['text'];
}
}


переменные переименовал, и их перекинул в главный шаблон(одной новости), где собираю новость + комменты(эти самые) + форму..
и ошибка такая же)) :
Notice: Undefined variable: comm in Z:\home\localhost\www\core\libs\view.php(59) : eval()'d code on line 15
[Денвер: показать возможную причину ошибки] /
Notice: Undefined variable: comm in Z:\home\localhost\www\core\libs\view.php(59) : eval()'d code on line 15

Notice: Undefined variable: comm in Z:\home\localhost\www\core\libs\view.php(59) : eval()'d code on line 17


или это всё потому что, весь этот шаблон собираеться в шаблон главной страницы (модуля main) show.tpl - ввиде $news ?) - обьединение main.tpl и show.tpl

т.е. конечный шаблон show.tpl который выводит $news - а в нём 2 шаблона (row.tpl и main.tpl вывод обзора новостей или конкретной), так вот в main.tpl я и засунул эти переменные($comm['text'],$comm['data'],$comm['name'] комментов), их наверно надо было определить как то в парсинге $news ? ))

$news = parseTpl($tpl_main, $row); - получаеться видимы только переменные $row((
а мои $comm - как передать ? ))

Спустя 1 час, 6 минут, 27 секунд (4.10.2011 - 17:20) zeromind написал(а):
подскажите каким образом, мне весь вывод обобщить в одном шаблоне, новости + комменты )
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.