Перейти к содержимому


FAQ (вопросы и ответы).


  • Вы не можете ответить в тему
Сообщений в теме: 67

#1 R.Sergey

    Администратор

  • Администраторы
  • 2810 сообщений
Репутация: 332
Мастер

Отправлено 26 June 2012 - 06:48 AM

Модуль позволяет пользователям задавать вопросы на отдельной странице, а администраторам модерировать и отвечать на них.

Скачать из архива модуль FAQ (вопросы и ответы) - автор (Pascal)
  • 0

#2 mailomsk

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 135 сообщений
Репутация: 0
Начинающий
  • ГородОмск

Отправлено 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) {
}
---

  • 0

#3 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 26 June 2012 - 12:28 PM

Тable 'vbhfyjk_shop.answer' doesn't exist

Думаю, что все стандартно - в модуле жестко прописан префикс конкретных таблиц, а не DB_PRFX.
Имеет смысл поискать этот префикс (vbhfyjk_) текстовым поиском и заменить на ".DB_PRFX." или '.DB_PRFX.' - тут уж смотря в каких кавычках запросы написаны. Если, конечно, это не Ваш префикс :).

И модуль работает только если пройти по такой ссылке index.php?answer=yes

И что в этом странного, необычного или неправильного? :)
Вас же не удивляет, что страница "Прайс-лист" работает только по ссылке index.php?show_price=yes
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#4 R.Sergey

    Администратор

  • Администраторы
  • 2810 сообщений
Репутация: 332
Мастер

Отправлено 26 June 2012 - 12:33 PM

index.php?answer=yes


При желании можно прописать в хтаксесс строчку
RewriteRule ^faq\.html$ index.php?answer=yes [L]

и будет открываться по адресу /faq.html
  • 0

#5 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 26 June 2012 - 12:41 PM

(Update) Отставить вышенаписанное :). Глянул - не нашел поиском такого префикса. И как же я сразу не заметил у Вас

Sql: insert into answer
Sql: select count(*) from answer

т.е. по какой-то причине запрос идет для таблицы answer, а не для xxxx_answer.
Ищите причину.

При желании можно прописать в хтаксесс строчку

Эх, помогать, так уж помогать :).
А также залезть в файл index.tpl.html, найти там "Новости", "Прайс", "О магазине" и совершенно аналогично дописать туда строку с "FAQ"
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#6 Pascal

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 46 сообщений
Репутация: 13
Начинающий

Отправлено 26 June 2012 - 12:43 PM

префикс был 'vmkt_'. Возможно когда проводили запрос к БД на создание таблицы answer, то в запросе изначально не заменили старый префикс на новый. В инструкции по установке это все написано. Когда себе на тест ставил - все поэтапно записывал, у меня без глюков.

2. В файле answer.sql найти `vmkt_answer` и заменть префикс vmkt_ на свой.
Свой префикс можно посмотреть в файле core/config/connect.inc.php в определении переменной DB_PRFX


  • 0

#7 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 26 June 2012 - 12:51 PM

(Update) Копнул чуть глубже. Уверенно думаю, что пункт инструкции

7. Отредактировать файл core/config/tables.inc.php
В конец файла добавить:
if ( !defined('ANSWER_TABLE') ) define('ANSWER_TABLE', $prefix.'answer');

Вы выполнили АБСОЛЮТНО дословно, даже не задумавшись, что остальные строчки выглядят несколько по другому.
Предлагаю таки задуматься над этим :).

3. В админ-панели: Каталог=>Администрирование БД=>Импорт базы данных (sql файл или .gz архив)
- Загрузить файл answer.sql и выполнить импортирование

А вот за это спасибо! Мне не пришло в голову, что можно импортировать не только всю базу, а любой SQL-сценарий, т.е. не извращаться в инструкциях на предмет "скопируйте a.php в корень и выполните его, затем удалите" :).
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#8 R.Sergey

    Администратор

  • Администраторы
  • 2810 сообщений
Репутация: 332
Мастер

Отправлено 26 June 2012 - 12:58 PM

А вот за это спасибо! Мне не пришло в голову, что можно импортировать не только всю базу, а любой SQL-сценарий, т.е. не извращаться в инструкциях на предмет "скопируйте a.php в корень и выполните его, затем удалите"


Мне не счет этого понравилась реализация как в ЧПУ. Т.е. инсталляция (создание таблиц полей) идет через пхп самого модуля при первом запуске. Поэтому теперь так все и делаю. Тогда пункт загрузите через адмику файл скюэль или запустите удалите -- отпадает сам собой.
  • 0

#9 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 26 June 2012 - 01:01 PM

Когда себе на тест ставил - все поэтапно записывал, у меня без глюков.

И строка
if ( !defined('ANSWER_TABLE') ) define('ANSWER_TABLE', $prefix.'answer');
работает? :)
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#10 Pascal

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 46 сообщений
Репутация: 13
Начинающий

Отправлено 26 June 2012 - 01:05 PM

(Update) Копнул чуть глубже. Уверенно думаю, что пункт инструкции

7. Отредактировать файл core/config/tables.inc.php
В конец файла добавить:
if ( !defined('ANSWER_TABLE') ) define('ANSWER_TABLE', $prefix.'answer');

Вы выполнили АБСОЛЮТНО дословно, даже не задумавшись, что остальные строчки выглядят несколько по другому.
Предлагаю таки задуматься над этим :).

3. В админ-панели: Каталог=>Администрирование БД=>Импорт базы данных (sql файл или .gz архив)
- Загрузить файл answer.sql и выполнить импортирование

А вот за это спасибо! Мне не пришло в голову, что можно импортировать не только всю базу, а любой SQL-сценарий, т.е. не извращаться в инструкциях на предмет "скопируйте a.php в корень и выполните его, затем удалите" :).



да не за что ;)

с переменной $prefix и в правду ступил, извиняюсь, у меня просто несколько магазинов сделано на одной CMS и можно выбирать какой именно.
Так будет правильнее.
if (  !defined('ANSWER_TABLE')  ) define('ANSWER_TABLE', DB_PRFX.'answer');

  • 0

#11 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 26 June 2012 - 01:07 PM

Мне не счет этого понравилась реализация как в ЧПУ. Т.е. инсталляция (создание таблиц полей) идет через пхп самого модуля при первом запуске.

Я такое решение подсмотрел, вроде, в модуле "Статьи", но оно мне не нравится двумя моментами:
1. CREATE IF NOT EXIST таки запрос к серверу, который нужен один-единственный раз, а выполняется каждый раз. Некрасиво. Не оптимально.
2. Я не смог разобраться, как аналогичным образом (коротко, в один запрос) сделать добавление полей в существующую таблицу, т.е. ALTER TABLE ADD при условии отсутствия такого поля.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#12 R.Sergey

    Администратор

  • Администраторы
  • 2810 сообщений
Репутация: 332
Мастер

Отправлено 26 June 2012 - 01:12 PM

1. CREATE IF NOT EXIST таки запрос к серверу, который нужен один-единственный раз, а выполняется каждый раз. Некрасиво. Не оптимально.

Да согласен лишний запрос, но в админке..... там то и нагрузки на БД особой нет когда в модуль входишь, так что ИМХО одним запросом больше, одним меньше )))) на скорость особо не повлияет, а при работе модуля этого запроса уже и нет.
Если модуль пишешь для себя, то можно и ручками создать ..... а если для простых смертных, у которых каждое лишнее действие вызывает кучу вопросом "А где это?", "А что это?" то проще всего сделать именно так. )))
  • 0

#13 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 26 June 2012 - 01:26 PM

Да согласен лишний запрос, но в админке

В админке да, пофиг на лишний запрос. Но в ЧПУ оно не в админке. Правда, тоже не часто, только при запросе sitemap.xml.

PS. Про админку тоже хорошая мысль... Спасибо! Ка раз те модули, где нужно ALTER TABLE имеют админскую часть, где в силу редкости использования сценарий из запроса DESC, а затем ALTER TABLE при отсутствии полей в результате DESC вполне приемлем.

Чота топикстартер затих :).
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#14 Pascal

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 46 сообщений
Репутация: 13
Начинающий

Отправлено 26 June 2012 - 01:32 PM

А кто топикстартер? :blush:
  • 0

#15 mailomsk

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 135 сообщений
Репутация: 0
Начинающий
  • ГородОмск

Отправлено 26 June 2012 - 01:52 PM

Всем привет! vbhfyjk_ это не префикс!

Когда себе на тест ставил - все поэтапно записывал, у меня без глюков.

И строка
if ( !defined('ANSWER_TABLE') ) define('ANSWER_TABLE', $prefix.'answer');
работает? :)

Пробовал и так и так, сразу насторожило отличие!
БД импортировал через phpmyadmin

1-раз ставил получил белый экран
2-й раз все четко по инструкции.
  • 0

#16 Pascal

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 46 сообщений
Репутация: 13
Начинающий

Отправлено 26 June 2012 - 02:11 PM

Пробовал и так и так, сразу насторожило отличие!
БД импортировал через phpmyadmin

1-раз ставил получил белый экран
2-й раз все четко по инструкции.


2-ой пункт написан для импорта через админку. Если Вы делаете через phpmyadmin, то Вы заменили 'vmkt_' на свой префикс таблиц?
  • 0

#17 mailomsk

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 135 сообщений
Репутация: 0
Начинающий
  • ГородОмск

Отправлено 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_ заменил на свой.
  • 0

#18 Pascal

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 46 сообщений
Репутация: 13
Начинающий

Отправлено 26 June 2012 - 02:55 PM

Заменили правильно. Правда у меня почему то был префикс vmkt_.
И что в итоге у Вас получилось?
  • 0

#19 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 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&amp;sub=yandex">{$smarty.const.ADMIN_STRING_YANDEX}</a></div>


строчку


<div class="marg"><a href="{$smarty.const.ADMIN_FILE}?dpt=catalog&amp;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
  • 2
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#20 Pascal

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 46 сообщений
Репутация: 13
Начинающий

Отправлено 26 June 2012 - 04:27 PM

Скачал как мог. :rolleyes:
  • 0