Форумы / National / Russian / Тех. поддержка / Запросы документации

<<<1...5...10...16171819202122>>>

Принимаем вопросы от населения

Kabak
#271 24.03.2015 10:37

Здравствуйте.

Нужна ваша помощь по AJAX в Cotonti

У меня в header.tpl есть запрос :

					<a href="index.php?ask_q=ask_question" class="btn btn-ask btn-block" class="ajax" rel="get-ajaxKabak"><i class="fa fa-question-circle fa-lg"></i> {PHP.L.Ask}</a>

И нужно чтобы в index.tpl заполнился вот такой DIV :

				<div id="ajaxKabak">
					{ASK_QUESTION}
				</div>

в php файле плагина вот такой код :

	$ask_q		= cot_import('ask_q','G','TXT'); 
	
if ( COT_AJAX )      
if ( $ask_q == 'ask_question'){
   
    $t->assign(array(
		'ASK_QUESTION' => cot_question('page', $pag['page_id'], 'question'),
	    ));
}
	$t->parse('QUESTION');

но он не отрисовывает ничего , если я ставлю проверку

if ( COT_AJAX )

Как только я её ремлю, то блок {ASK_QUESTION} заполняется.

Что я не так делаю с AJAX ?

Dr2005alex
#272 24.03.2015 12:03
 $ask_q      = cot_import('ask_q','G','TXT'); 
     

if ( $ask_q == 'ask_question'){

if ( COT_AJAX ) {

 cot_sendheaders(); // для нормальной кодировки
 echo cot_question('page', $pag['page_id'], 'question');
 exit;

} else{     

    $t->assign(array(
        'ASK_QUESTION' => cot_question('page', $pag['page_id'], 'question'),
        ));

}

}
    $t->parse('QUESTION');

или

$ask_q      = cot_import('ask_q','G','TXT'); 
     
      
if ( $ask_q == 'ask_question'){
    
    $t->assign(array(
        'ASK_QUESTION' => cot_question('page', $pag['page_id'], 'question'),
        ));
}
    $t->parse('QUESTION');

if ( COT_AJAX ){

cot_sendheaders();
echo $t->text('QUESTION');
exit;

}

 

WebKaa.ru - Cotonti Relax
Kabak
#273 24.03.2015 12:48

Спасибо

Но получается что AJAX у меня не работает  ( AJAX включён ) . Переменная COT_AJAX всегда не определена т.е. ни False ни True.

Как сделать чтобы AJAX заработал с кодом указанным выше ? 

Моджет я тэги в шаблоне ни так определяю или ещё что ?

Dayver
#274 24.03.2015 12:55

Добавьте в свою ссылку параметр _ajax=1

<a href="index.php?ask_q=ask_question&_ajax=1" class="btn btn-ask btn-block" class="ajax" rel="get-ajaxKabak"><i class="fa fa-question-circle fa-lg"></i> {PHP.L.Ask}</a>

Что бы проверка аяксовости запроса https://github.com/Cotonti/Cotonti/blob/master/system/common.php#L201 наверняка сработала

Pavlo Tkachenko aka Dayver
Kabak
#275 24.03.2015 15:07

при добавлении &_ajax=1  {ASK_QUESTION} выводтится на чистой HTML странице без учёта CSS и структуры сайта. А нужно просто выводить/заполнять тэг в шаблоне

<div id="ajaxKabak">
    {ASK_QUESTION}
</div>

Что я делаю не так ?

Dr2005alex
#276 24.03.2015 19:31

может поможет понять

http://www.cotonti.com/docs/devel/ajax_helpers

http://mycotonti.ru/docs/devel/AJAX-Helpers-v-Cotonti

А вообще нужно видеть весь код и желательно в отдельной теме.

 

WebKaa.ru - Cotonti Relax
Kabak
#277 25.03.2015 17:33

Ещё вопрос. А CKEditor с ajax работатет ?  Потому что как только включаю &_ajax=1  выводится окно простого textedit, а не CKEditor с кнопочками.

question.index.tags.php

<?php
/* ====================
[BEGIN_COT_EXT]
Hooks=index.tags
Tags=index.tpl:{ASK_QUESTION}
[END_COT_EXT]
==================== */

defined('COT_CODE') or die('Wrong URL');

    require_once cot_incfile('question', 'plug');
    require_once cot_langfile('question', 'plug');
    
	$question_text	= cot_import('questiontext','P','HTM');
	$question_owner	= cot_import('owner','G','INT');    
	$ask_q		= cot_import('ask_q','G','TXT'); 
	
//if ( COT_AJAX )      
if ( $ask_q == 'ask_question'){
   
    $t->assign(array(
		'QUESTION' => cot_question('page', $pag['page_id'], 'question'),
	    ));
}
	$t->parse('QUESTION');

question.functions.php

<?php

defined('COT_CODE') or die('Wrong URL');

global $R, $L;
require_once cot_incfile('page', 'module');
require_once cot_incfile('forms');
require_once cot_langfile('question');

function cot_question($ext_name, $code, $cat = '')
{
	global $id, $db, $db_users, $cfg, $usr, $L, $sys, $R, $env, $structure;

	$can_question = 1;
	
	$t = new XTemplate(cot_tplfile('question', 'plug'));
	
	$editor = ($cfg['plugin']['question']['question_markup']) ? 'input_textarea_medieditor' : '';
	$t->assign(array(
	'QUESTION_FORM_SEND' => cot_url('plug', "e=comments&a=send&area=$ext_name&cat=$cat&item=$code"),
	'QUESTION_FORM_AUTHOR' => 'save author id somehow!!!',
	'QUESTION_FORM_TEXT' => $can_question ? cot_textarea('questiontext', $questiontext, 7, 120, '', $editor) : '',
	));

	$t->parse('QUESTION');
	return $t->text('QUESTION');
}

question.tpl

<!-- BEGIN: QUESTION -->
				<div class="p20">
					<strong class="dbl mb15">{PHP.L.Your_question}</strong>
					<form id="answer" name="answer" action="{QUESTION_FORM_POST}" method="post" class="ajax post-ajaxBlock">
						<div>{QUESTION_FORM_TEXT}</div>
						<button class="btn btn-success mt10" type="submit">{PHP.L.Ask_Question}</button>
					</form>
				</div>
<!-- END: QUESTION -->

header.tpl  с кнопкой по нажатию на которую должен заполниться тэг {QUESTION} в index.tpl

<a href="index.php?ask_q=ask_question" class="btn btn-ask btn-block askclosed"><i class="fa fa-question-circle fa-lg"></i> {PHP.L.Ask}</a>

index.tpl  Блок в который выводится окно CKEditor

				<div id="ajaxBlock">
					{QUESTION}
				</div>

Что не так я делаю ?

Dayver
#278 25.03.2015 18:14
В .index.tags.php строка с parse() лишняя. И где в ссылке в аттрибуте class значение ajax?

Добавлено 6 минут спустя:

Ну а _ajax=1 не место в ссылках по которым переход возможен. Этот параметр предназначен только для ссылок которые должны открываться только аяксом.
Pavlo Tkachenko aka Dayver
Отредактировано: Dayver (25.03.2015 18:20, 9 лет назад)
Kabak
#279 25.03.2015 18:54

Да, переделал

<a href="index.php?ask_q=ask_question" class="btn btn-ask btn-block askclosed ajax">

    $t->parse('QUESTION'); в .index.tags.php  убрал - работает.

Теперь выводит как положено в рамках сайта, а не на чистом листе, но окно CKEditor превращается в простой edit text фрейм.

Dr2005alex
#280 25.03.2015 19:01

CKeditor c ajax не дружит. В моем плагине rcomm есть пример танцев с бубном с этим редактором. (если читаешь код). Приходилось создавать скрытый input и в него по событию отправки формы через ajax копировать данные из редактора. Ну а на стороне сервера принимать данные со скрытого инпута. Только так удалось обойти проблему НЕ отправки данных редактора через ajax. Там свои заморочки.

WebKaa.ru - Cotonti Relax
Dayver
#281 25.03.2015 19:10
Странно у меня проблем никаких нет с этим виз.редактором и аяксом - себе делал редактирование страницы вызовом по аяксу, правда редактор в инлайн режиме
Pavlo Tkachenko aka Dayver
Kabak
#282 25.03.2015 19:41

инлайн режиме - это как ?

А как можно без jquery и прочего, с использованием только ajax средств Cotonti, вывести форму CKEditor ?  Без ajax форма CKEditor работает в моём коде. ( хотел нагрузку на сервер уменьшить )
( CKEditor - форма очень удобная и поддерживает кучу функций, если бы нужно было вводить простой текст не парился бы с CKEditor, а создал простое окно Edit )

Dayver
#283 25.03.2015 20:05
#40750 Kabak:

инлайн режиме - это как ?

это вот так http://ckeditor.com/demo#inline , а чем вам джикверя мешает?
Pavlo Tkachenko aka Dayver
Kabak
#284 26.03.2015 06:03

Тем, что это всё получается - каша понятная только разработчику плагина.  Часть плагина там, часть там. Мне не нравится такие решения.

Kort
#285 26.03.2015 09:28

Примерное тело плагина:

<?php
/* ====================
[BEGIN_COT_EXT]
Hooks=ajax
[END_COT_EXT]
==================== */

/**
 * Test plugin
 * @package Test
 */

defined('COT_CODE') or die('Wrong URL');

require_once cot_incfile('forms');

$action = cot_import('a','P','TXT');

$t = new XTemplate(cot_tplfile('test', 'plug'));

if ($action == 'asked')
{
	$t->parse('MAIN.RESULT');
}
else
{
	$t->assign(array(
		'ASK_FORM_ACTION' => cot_url('plug','r=test&a=asked'),
		'ASK_FORM_QUESTION' => cot_textarea('question', $question, 10, 120, 'id="question"', 'input_textarea_minieditor'),
	));
	$t->parse('MAIN.AJAXFORM');
}

Примерное тело шаблона:

<!-- BEGIN: MAIN -->
	<script src="plugins/ckeditor/lib/ckeditor.js" type="text/javascript"></script>
	<script>CKEDITOR.replace('question', {toolbar: 'Medium'});</script>
	<div class="p20">
<!-- BEGIN: AJAXFORM -->
		<form id="ask_form" action="{ASK_FORM_ACTION}" method="post" class="ajax post-ajax-ask">
			<div class="mb10">{ASK_FORM_QUESTION}</div>
			<button type="submit" class="submit btn btn-success">{PHP.L.Submit}</button>
		</form>
<!-- END: AJAXFORM -->

<!-- BEGIN: RESULT -->
		This is result
<!-- END: RESULT -->
	</div>
<!-- END: MAIN -->

У Булата была похожая проблема ))

SED.by - создание сайтов, разработка плагинов и тем для Котонти

<<<1...5...10...16171819202122>>>