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

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

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

Kabak
#271 2015-03-24 10:37

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

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

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

XML/XHTML
1
<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 :

XML/XHTML
1
2
3
<div id="ajaxKabak">
    {ASK_QUESTION}
</div>

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

PHP
1
2
3
4
5
6
7
8
9
10
    $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');

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

PHP
1
if ( COT_AJAX )

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

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

Dr2005alex
#272 2015-03-24 12:03
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 $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');

или

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$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 2015-03-24 12:48

Спасибо

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

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

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

Dayver
#274 2015-03-24 12:55

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

XML/XHTML
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 2015-03-24 15:07

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

XML/XHTML
1
2
3
<div id="ajaxKabak">
    {ASK_QUESTION}
</div>

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

Dr2005alex
#276 2015-03-24 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 2015-03-25 17:33

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

question.index.tags.php

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?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

XML/XHTML
1
2
3
4
5
6
7
8
9
<!-- 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

XML/XHTML
1
<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

XML/XHTML
1
2
3
<div id="ajaxBlock">
    {QUESTION}
</div>

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

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

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

Ну а _ajax=1 не место в ссылках по которым переход возможен. Этот параметр предназначен только для ссылок которые должны открываться только аяксом.
Pavlo Tkachenko aka Dayver
This post was edited by Dayver (2015-03-25 18:20, 10 years ago)
Kabak
#279 2015-03-25 18:54

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

XML/XHTML
1
<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 2015-03-25 19:01

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

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

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

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

Dayver
#283 2015-03-25 20:05
#40750 Kabak:

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

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

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

Kort
#285 2015-03-26 09:28

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

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?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');
}

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

XML/XHTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!-- 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>>>