FAQ (вопросы и ответы).
#1
Отправлено 26 June 2012 - 06:48 AM
Скачать из архива модуль FAQ (вопросы и ответы) - автор (Pascal)
#2
Отправлено 26 June 2012 - 11:43 AM
Вопрос через какой промежуток времени в админке видно вопрос?
Есть ли проверка на валидность email ?
И модуль работает только если пройти по такой ссылке index.php?answer=yes !!!
Прошло 15 минут в админке пусто.
При отправке пишет (Ваше сообщение принято и будет опубликовано после проверки модератором)
Я не силен в базах вот ошибку выдает
ERROR: 1146:Table 'vbhfyjk_shop.answer' doesn't exist Sql: insert into answer(parent, name, text,email, date, moder) values( 0, 'Проверка', 'Проверкассс','omsk@mail.ru', 1340704757,0) Link: /index.php?answer=yes Date: 26.06.12 - 13:59:17 Dump: array(1) { ["answer"]=> string(3) "yes" } array(5) { ["answerID"]=> string(1) "0" ["nick"]=> string(8) "Проверка" ["email"]=> string(12) "omsk@mail.ru" ["body"]=> string(11) "Проверкассс" ["add"]=> string(3) "yes" } --- ERROR: 1146:Table 'vbhfyjk_shop.answer' doesn't exist Sql: select count(*) from answer WHERE parent = 0 Link: /index.php?answer=yes&added Date: 26.06.12 - 13:59:18 Dump: array(2) { ["answer"]=> string(3) "yes" ["added"]=> string(0) "" } array(0) { } ---
#3
Отправлено 26 June 2012 - 12:28 PM
Думаю, что все стандартно - в модуле жестко прописан префикс конкретных таблиц, а не DB_PRFX.Тable 'vbhfyjk_shop.answer' doesn't exist
Имеет смысл поискать этот префикс (vbhfyjk_) текстовым поиском и заменить на ".DB_PRFX." или '.DB_PRFX.' - тут уж смотря в каких кавычках запросы написаны. Если, конечно, это не Ваш префикс .
И что в этом странного, необычного или неправильного?И модуль работает только если пройти по такой ссылке index.php?answer=yes
Вас же не удивляет, что страница "Прайс-лист" работает только по ссылке index.php?show_price=yes
#4
Отправлено 26 June 2012 - 12:33 PM
index.php?answer=yes
При желании можно прописать в хтаксесс строчку
RewriteRule ^faq\.html$ index.php?answer=yes [L]
и будет открываться по адресу /faq.html
#5
Отправлено 26 June 2012 - 12:41 PM
т.е. по какой-то причине запрос идет для таблицы answer, а не для xxxx_answer.Sql: insert into answer
Sql: select count(*) from answer
Ищите причину.
Эх, помогать, так уж помогать .При желании можно прописать в хтаксесс строчку
А также залезть в файл index.tpl.html, найти там "Новости", "Прайс", "О магазине" и совершенно аналогично дописать туда строку с "FAQ"
#6
Отправлено 26 June 2012 - 12:43 PM
2. В файле answer.sql найти `vmkt_answer` и заменть префикс vmkt_ на свой.
Свой префикс можно посмотреть в файле core/config/connect.inc.php в определении переменной DB_PRFX
#7
Отправлено 26 June 2012 - 12:51 PM
Вы выполнили АБСОЛЮТНО дословно, даже не задумавшись, что остальные строчки выглядят несколько по другому.7. Отредактировать файл core/config/tables.inc.php
В конец файла добавить:
if ( !defined('ANSWER_TABLE') ) define('ANSWER_TABLE', $prefix.'answer');
Предлагаю таки задуматься над этим .
А вот за это спасибо! Мне не пришло в голову, что можно импортировать не только всю базу, а любой SQL-сценарий, т.е. не извращаться в инструкциях на предмет "скопируйте a.php в корень и выполните его, затем удалите" .3. В админ-панели: Каталог=>Администрирование БД=>Импорт базы данных (sql файл или .gz архив)
- Загрузить файл answer.sql и выполнить импортирование
#8
Отправлено 26 June 2012 - 12:58 PM
А вот за это спасибо! Мне не пришло в голову, что можно импортировать не только всю базу, а любой SQL-сценарий, т.е. не извращаться в инструкциях на предмет "скопируйте a.php в корень и выполните его, затем удалите"
Мне не счет этого понравилась реализация как в ЧПУ. Т.е. инсталляция (создание таблиц полей) идет через пхп самого модуля при первом запуске. Поэтому теперь так все и делаю. Тогда пункт загрузите через адмику файл скюэль или запустите удалите -- отпадает сам собой.
#9
Отправлено 26 June 2012 - 01:01 PM
И строкаКогда себе на тест ставил - все поэтапно записывал, у меня без глюков.
if ( !defined('ANSWER_TABLE') ) define('ANSWER_TABLE', $prefix.'answer');
работает?
#10
Отправлено 26 June 2012 - 01:05 PM
(Update) Копнул чуть глубже. Уверенно думаю, что пункт инструкции
Вы выполнили АБСОЛЮТНО дословно, даже не задумавшись, что остальные строчки выглядят несколько по другому.7. Отредактировать файл core/config/tables.inc.php
В конец файла добавить:
if ( !defined('ANSWER_TABLE') ) define('ANSWER_TABLE', $prefix.'answer');
Предлагаю таки задуматься над этим .А вот за это спасибо! Мне не пришло в голову, что можно импортировать не только всю базу, а любой SQL-сценарий, т.е. не извращаться в инструкциях на предмет "скопируйте a.php в корень и выполните его, затем удалите" .3. В админ-панели: Каталог=>Администрирование БД=>Импорт базы данных (sql файл или .gz архив)
- Загрузить файл answer.sql и выполнить импортирование
да не за что
с переменной $prefix и в правду ступил, извиняюсь, у меня просто несколько магазинов сделано на одной CMS и можно выбирать какой именно.
Так будет правильнее.
if ( !defined('ANSWER_TABLE') ) define('ANSWER_TABLE', DB_PRFX.'answer');
#11
Отправлено 26 June 2012 - 01:07 PM
Я такое решение подсмотрел, вроде, в модуле "Статьи", но оно мне не нравится двумя моментами:Мне не счет этого понравилась реализация как в ЧПУ. Т.е. инсталляция (создание таблиц полей) идет через пхп самого модуля при первом запуске.
1. CREATE IF NOT EXIST таки запрос к серверу, который нужен один-единственный раз, а выполняется каждый раз. Некрасиво. Не оптимально.
2. Я не смог разобраться, как аналогичным образом (коротко, в один запрос) сделать добавление полей в существующую таблицу, т.е. ALTER TABLE ADD при условии отсутствия такого поля.
#12
Отправлено 26 June 2012 - 01:12 PM
Да согласен лишний запрос, но в админке..... там то и нагрузки на БД особой нет когда в модуль входишь, так что ИМХО одним запросом больше, одним меньше )))) на скорость особо не повлияет, а при работе модуля этого запроса уже и нет.1. CREATE IF NOT EXIST таки запрос к серверу, который нужен один-единственный раз, а выполняется каждый раз. Некрасиво. Не оптимально.
Если модуль пишешь для себя, то можно и ручками создать ..... а если для простых смертных, у которых каждое лишнее действие вызывает кучу вопросом "А где это?", "А что это?" то проще всего сделать именно так. )))
#13
Отправлено 26 June 2012 - 01:26 PM
В админке да, пофиг на лишний запрос. Но в ЧПУ оно не в админке. Правда, тоже не часто, только при запросе sitemap.xml.Да согласен лишний запрос, но в админке
PS. Про админку тоже хорошая мысль... Спасибо! Ка раз те модули, где нужно ALTER TABLE имеют админскую часть, где в силу редкости использования сценарий из запроса DESC, а затем ALTER TABLE при отсутствии полей в результате DESC вполне приемлем.
Чота топикстартер затих .
#14
Отправлено 26 June 2012 - 01:32 PM
#15
Отправлено 26 June 2012 - 01:52 PM
Пробовал и так и так, сразу насторожило отличие!И строкаКогда себе на тест ставил - все поэтапно записывал, у меня без глюков.
if ( !defined('ANSWER_TABLE') ) define('ANSWER_TABLE', $prefix.'answer');
работает?
БД импортировал через phpmyadmin
1-раз ставил получил белый экран
2-й раз все четко по инструкции.
#16
Отправлено 26 June 2012 - 02:11 PM
Пробовал и так и так, сразу насторожило отличие!
БД импортировал через phpmyadmin
1-раз ставил получил белый экран
2-й раз все четко по инструкции.
2-ой пункт написан для импорта через админку. Если Вы делаете через phpmyadmin, то Вы заменили 'vmkt_' на свой префикс таблиц?
#17
Отправлено 26 June 2012 - 02:52 PM
DROP TABLE IF EXISTS `lavka_answer`; CREATE TABLE `lavka_answer` ( `answerID` int(11) NOT NULL AUTO_INCREMENT, `text` text NOT NULL, `date` int(11) NOT NULL, `name` varchar(150) NOT NULL, `parent` int(11) NOT NULL, `moder` int(11) NOT NULL, `email` varchar(100) NOT NULL, PRIMARY KEY (`answerID`) ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=0 ;
В файле answer.sql найти `vmkt_answer` и заменть префикс vmkt_ на свой.
Я чего то не понимаю?
lavka_ заменил на свой.
#18
Отправлено 26 June 2012 - 02:55 PM
И что в итоге у Вас получилось?
#19
Отправлено 26 June 2012 - 04:25 PM
1. импортировать (создать таблицу) через админку не удалось. Причины не понял. При импорте в логе SQL-сервера появляется совершенно нормальная запись о безошибочном выполнении запроса CREATE TABLE cpu_answer bla-bla-bla, но таблицы нет . Разбираться не стал.
Ровно та же строка (из файла answer.sql) в консоли mysql совершенно нормально принялась и таблица создалась.
2. в пункте 4 ошибка.
вместо
core/tpl/user/название_текущего_шаблона/blocks/answer.tpl.html
надо
core/tpl/user/название_текущего_шаблона/answer.tpl.html
3. пункт 8 не особенно и нужен, если мы в пунктах 5 и 6 пишем "FAQ", а не {$smarty.const.QUESTION_ANSWER}, т.к. QUESTION_ANSWER нигде не используется.
Дальнейшее не обязательно но полезно.
12. Чтобы в настройке других блоков можно было выборочно задать "Выбранные страницы"
в том числе и для модуля "FAQ" надо в файл core/tpl/admin/conf_blocks_edit.tpl.html после строки
<option value="visit_history.tpl.html" {if in_array("visit_history.tpl.html", $blocks_edit.pages)}selected{/if}>{$smarty.const.BLOCK_EDIT_PAGE_35}</option>
вставить
<option value="answer.tpl.html" {if in_array("answer.tpl.html", $blocks_edit.pages)}selected{/if}>{$smarty.const.QUESTION_ANSWER}</option>
13. Чтобы в админке оно было не только на боковой панели, но и на центральной нужно добавить в /core/tpl/admin/default.tpl.html после строчки, скажем
<div class="marg"><a href="{$smarty.const.ADMIN_FILE}?dpt=modules&sub=yandex">{$smarty.const.ADMIN_STRING_YANDEX}</a></div>
строчку
<div class="marg"><a href="{$smarty.const.ADMIN_FILE}?dpt=catalog&sub=answer">{$smarty.const.QUESTION_ANSWER}</a></div>
Это я ошибся. Имелся в виду mailomsk.А кто топикстартер?
Продолжаем исправления инструкции .
в пункт 8 надо добавить
define('CONF_ANSWER_COUNT', 10);
а то CONF_ANSWER_COUNT в answer.php используется, но нигде не задается. число по вкусу. Как я понял, это количество вопросов на странице. Без этого вопросы-ответы не будут выводиться вообще, только страница с заголовком и формой для ввода.
----------------------------------------------
Продолжаем уже по мелочи .
- Не очень понятно, зачем там поле для ввода емейла. Как я понимаю, оно нигде и никак не используется.
- я бы таки поменял "catalog" на "modules", раз уж мы располагаем модуль админки в разделе "модули".
Т.е. переименовал catalog_answer.php в modules_answer.php и заменил dpt=catalog на dpt=modules в двух соответствующих местах.
- answer.tpl.html:
вместо конструкции заголовка
<div class="center-top">
<h2 id="catalog">Вопросы и ответы</h2>
<div class="corner1"></div>
<div class="corner2"></div>
</div>
<div class="center-mid">
на мой вгляд куда лучше традиционное
{include file="header.tpl.html" header=$smarty.const.QUESTION_ANSWER}
просто потому, что в общем стиле получается.
Ну а так вполне работает - http://cpu.badisoft.....php?answer=yes
#20
Отправлено 26 June 2012 - 04:27 PM