Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Jquery + PHP + Smarty

Приветствую, имеется форма:
<select id="country" name="country">
        <option>Выберите страну...</option>
    {foreach $row_country as $country}
        <option value="{$country.country_id}">{$country.name}</option>
    {/foreach}
    </select>
    <select id="region" name="region" disabled>
        <option>Выберите регион...</option>
    {foreach $row_region as $region}
        <option value="{$id.region_id}">{$region.region}</option>
    {/foreach}
   </select>


Jquery функция:
$('#country').change( function() {
    var country = $('#country').val();
    $.ajax({
	type: "POST",
	url: "index.php?option=registration",
	data: country,
	success: function(data) {
            $("#region").removeAttr('disabled');
            $("#results").html(country);
            alert(country);
	}
});
});

И PHP обработчик:
class Registration extends Core {
    public function getContent() {
        global $mysqli;
        global $smarty;
        
        $res = $mysqli->query("SELECT * FROM countries ORDER BY name");
            if ($res->num_rows > 0) {
                for ($i=0; $i<$res->num_rows; $i++) {
                    $row_country[] = $mysqli->assoc($res);
                }
            $smarty->assign("row_country", $row_country);
            $smarty->assign("country", $_POST['country']);
            }
        $res_region = $mysqli->query("SELECT * FROM cities WHERE country_id=".$_POST['country']." ORDER BY region");
            if ($res_region->num_rows > 0) {
                for ($j=0; $j<$res_region->num_rows; $j++) {
                    $row_region[] = $mysqli->assoc($res_region);
                }
            $smarty->assign("row_region", $row_region);
            }
    }
}

Получается что при выборе первого селекта, переменная country должна подставиться во второй SQL запрос и вывести второй список в зависимости от выбранного селекта.
Проблема в том, что в блоке с id="results" - значение переменной country выводит правильно, а в PHP класс ее засунуть не получается, подскажите как можно решить проблему?
Ответ: Конечно извиняюсь ибо звучит грубо, но вы первый вопрос решили через задницу и в данном случае хотите такого же решения.

Метод error служит для обработки именно ошибок, как то отсутствия соединения с сервером, некорректные данные возвращенные сервером, к примеру без определения этого метода и формата JSON, будь он некорректен, то будет тишина.

Какое отношение имеет к ошибке отсутствие записей в базе? Это не ошибка, это информация, которую нужно сообщить пользователю, и если эту ситуацию не анализирует сервер и не возвращает готовое сообщение, то это должен анализировать клиент и в методе success, а не error.
Вопрос: Из Smarty в js

Здравствуйте.В шаблоне есть ф-ция из Smarty для выбора города. Выглядит так.
{city_input value=$usr.city name="city" width="300px"}
В конце в value выбранный город. Хочу сохранить его в LocalStorage.
Поставил ниже ф-ции ссылку . Вышло так.
<div class="my_city">
	{city_input value=$usr.city name="city" width="300px"}
<a href="">Изменить</a><br/>
	</div>
{literal}
    <script>
	var city = ...???;

	$('.my_city a').on('click',function(){
  LocalStorage.setItem('city',...???)
	});
	</script>
{/literal}


Подскажите как решить.
Ответ: Решил с помощью
var city = document.getElementsByName("city");
Вопрос: Как вывести теги Smarty из jQuery(js)

Код скрипта вставки Smarty:
Код Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        var a = '{foreach key=aid item=article from=$articles}{if $article.category_id == '+id+'}';
    var d = '{$article.image}';
    var f = '{$article.content}';
    var g = '{/if}{/foreach}';
    {literal}
        $(document).ready(function(){
            $('.tabs li a').click(function(){
                var id = $(this).attr('data-id');
                $(".gallery").fadeOut();
                $(".gallery").html(
                    a+'<a href="#"><div class="gallery-block"><div class="hover-gallery"><img src="/images/photos/small/plus.png" alt=""></div><img src="/images/photos/small/'+d+'" alt=""><div class="gallery-title">'+f+'</div></div></a>'+g
                );
                $(".gallery").fadeIn();
            });
        });
    {/literal}
Куда нужно вставить:
Код HTML5
1
2
3
4
5
6
7
8
9
<div class="gallery">
{foreach key=aid item=article from=$articles}
    <a href="#"><div class="gallery-block">
    <div class="hover-gallery"><img src="/images/photos/small/plus.png" alt=""></div>
    <img src="/images/photos/small/{$article.image}" alt="">
    <div class="gallery-title">{$article.content}</div>
    </div></a>
{/foreach}
</div>
При нажатии на таб, происходить событие fadeOut
В консоле пишет: Uncaught ReferenceError: d is not defined
Ответ: Poznakomlus, вы разве не в курсе, что в приличном обществе не принято разговаривать на незнакомом другим членам общества языке

Не по теме:

никогда разве не сталкивались?
сидите компанией за столом
и вдруг двое ваших приглашённых (или случайно оказавшихся) товарищей из какойтостана перебрасываются между собою парой фраз на своём какойтостанском
и за столом -- сразу тишина, потому что каждый из тех, кто не понимает какойтостанского, вдруг подумал, что какойтостанцы говорили как раз про него, и, вполне может быть, -- говорили нелицеприятные вещи



вы находитесь на форуме чистого (pure) языка Javascript -- и это не ваша личная переписка, а публичное место
будьте любезны общаться на всем понятном языке

для разговоров на недоязыке JQuery имеется специальное помещение, и вы его адрес знаете
Вопрос: Шаблонизатор Smarty

ДОбрый ночь, долго лениво читал документацию но так и не нашел того что нужно.
Есть такая строчка в шаблоне:
<li><a class="" href="">{$department[0][1]}</a></li>

мне нужно ее проциклировать несколько раз и чтобы в маcсиве $department c каждой итерацией увеличивался первый элемент на 1. Возможно ли это?
Максимум что я смог сделать:
{section name=block loop=3}
<li><a class="" href="">{$department[0][1]}</a></li>
{/section}

Но как назначить переменную и увеличивать ее значение при каждой итерации?
P.S. ((((

Это сообщение отредактировал user_name - 13.01.2015 - 01:06
Ответ: AllesKlar
Спасибо большое, все получилось)
Вопрос: js и Smarty.Получить переменную

Всем Привет.Подскажите, кто знает.
{section name=i start=$start max=$max loop=$weeks}
               <tr>
                  <td>{$weeks[i]}</td>
               </tr>
               {/section}
<tr><td><a onclick="Next_Week();" href="javascript:void(0)">Далее</a></td></tr>

Нужно иметь возможность менять $start по клику. Как мне её получить?
Ответ:
Сообщение от ureech
Как можно решить это дело?
Сперва поясните что за данные (откуда) выводятся в этой таблице?
Вопрос: Как скрыть блок тегов Ajax?

Подксажите как скрыть блок тегов при помощи Ajax. Есть сайт на нём есть блок тегов. Я пытаюсь скрыть теги при помощи данного метода
Код Javascript
1
2
3
$(document).ready(function() {
  $("#tags").load("http://сайт/tags.php");
});
в файле blocktags.tpl вставляю
Код PHP
1
<div id="tags"></div>
а всё содержимое вставляю
Код PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!-- Block tags module -->
<div id="tags_block_left" class="block tags_block">
  <p class="title_block">
    {l s='Tags' mod='blocktags'}
  </p>
  <div class="block_content">
    {if $tags}
      {foreach from=$tags item=tag name=myLoop}
        <a 
        class="{$tag.class} {if $smarty.foreach.myLoop.last}last_item{elseif $smarty.foreach.myLoop.first}first_item{else}item{/if}"
        href="{$link->getPageLink('search', true, NULL, "tag={$tag.name|urlencode}")|escape:'html':'UTF-8'}" 
        title="{l s='More about' mod='blocktags'} {$tag.name|escape:'html':'UTF-8'}" 
        >
          {$tag.name|escape:'html':'UTF-8'}
        </a>
      {/foreach}
    {else}
      {l s='No tags specified yet' mod='blocktags'}
    {/if}
  </div>
</div>
<!-- /Block tags module -->
в tags.php
но в ответ выходит
Код PHP
1
2
{L S='TAGS' MOD='BLOCKTAGS'}
{if $tags} {foreach from=$tags item=tag name=myLoop} {$tag.name|escape:'html':'UTF-8'} {/foreach} {else} {l s='No tags specified yet' mod='blocktags'} {/if}
Подскажите что делаю не так? cms prestashop
Ответ: Мне нужно чтобы в исходном коде страницы вместо
Код PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!-- Block tags module -->
<div id="tags_block_left" class="block tags_block">
  <p class="title_block">
    {l s='Tags' mod='blocktags'}
  </p>
  <div class="block_content">
    {if $tags}
      {foreach from=$tags item=tag name=myLoop}
        <a 
        class="{$tag.class} {if $smarty.foreach.myLoop.last}last_item{elseif $smarty.foreach.myLoop.first}first_item{else}item{/if}"
        href="{$link->getPageLink('search', true, NULL, "tag={$tag.name|urlencode}")|escape:'html':'UTF-8'}" 
        title="{l s='More about' mod='blocktags'} {$tag.name|escape:'html':'UTF-8'}" 
        >
          {$tag.name|escape:'html':'UTF-8'}
        </a>
      {/foreach}
    {else}
      {l s='No tags specified yet' mod='blocktags'}
    {/if}
  </div>
</div>
<!-- /Block tags module -->
было
<div id="tags"></div>
Вопрос: Ajax в шаблонах

кто нибудь задавался вопросом перевода шаблонного сайта на ajax?
любой шаблонизатор, тот же smarty к примеру, который собирает сайт их html заготовок? Как ajax'ом подгрузить целую html страницу, в которой перед этим еще нужно кучу данных подставить?
Я второй месяц перевариваю идею, не могу понять как это реализовать. Не append'ом же рисовать странички...
Ответ: просто перечитывал темы, решил написать решение, может кому пригодиться.

в смарти есть функция fetch() которая перехватывает вывод. таким обр код

Код PHP
1
2
    $result = $smarty->fetch("shablon.tpl");
    echo $result;
таким образом результат (готовая откомпиленая страница) будет выведен не на экран, а в переменную которую мы передаем ajax'у и подставляем в нужном месте страницы как

Код Javascript
1
$("#nujnoe_mesto").html(response);
Вопрос: как передать переменные PHP по AJAX

решил сделать модальное окно botstrap

создал такую кнопу

Код:
<a data-toggle="modal" data-target="#myModal" 
onclick
="send('id={$email.id}')">


такой mail.php код

Код:

<?php
define
("CLIENTAREA", true);
require "init.php";

if (isset($_SESSION['uid'])) {
    require "includes/smarty/Smarty.class.php";
    $smarty = new Smarty();
    $smarty->template_dir = "templates/" . $whmcs->get_sys_tpl_name() . "/";
    $smarty->compile_dir = $templates_compiledir;
    $smarty->assign("template", $whmcs->get_sys_tpl_name());
    $smarty->assign("LANG", $_LANG);
    $smarty->assign("companyname", $CONFIG['CompanyName']);
    $smarty->assign("logo", $CONFIG['SystemURL']);
    $id = $whmcs->get_req_var("id");
    $result = select_query("tblemails", "", array("id" => $id, "userid" => $_SESSION['uid']));
    $data = mysql_fetch_array($result);
    $date = $data['date'];
    $subject = $data['subject'];
    $message = $data['message'];
    $date = fromMySQLDate($date, "time");
    $smarty->assign("date", $date);
    $smarty->assign("subject", $subject);
    $smarty->assign("message", $message);
    $template_output = $smarty->fetch("mail.tpl");
    echo $template_output;
    return 1;
}
?>



и само модальное окно main.tpl

Код:
<!DOCTYPE html>
<
html lang="en">
  <head>
    <meta charset="utf-8">
    <title>{$LANG.clientareaemails} - {$companyname}</title>
  </head>

<!--
 Modal -->
<
div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="false">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="false">&times;</span></button>
        <h4 class="modal-title" id="myModalLabel">
        <p><strong>Пользователь:</strong></p>
        <p><strong>Тема:</strong> {$companyname} {$logo} - {$subject}</p>
        <p><strong>от кого:</strong></p>
        <p><strong>Кому:</strong></p>
        </h4>
      </div>
      <div class="modal-body">{$message}</div>
      <div class="modal-footer">
        <button type="button" class="btn btn-primary" data-dismiss="modal">Закрыть</button>
      </div>
    </div>
  </div>
</
div>

</
html>


затем написал AJAX чтоб по ajax передавались переменные php


Код:

function send
(dataToSend){
       $.ajax({
                type: "GET",
                url: "mail.php?"+dataToSend,
                data: $("#myModal").serialize(),
                success: function(response) {
 
console
.log(response);  //просто так, для отладки
$("#subject").html(response[0]);
$(
"#message").html(response[1]);
$(
"#myModalLabel").show();
                }
        });
 
}


console.log(response); выдает все что должно вывести, а в модальное окно это все не выводится, что надо ещё дописать?

Добавлено спустя 4 минуты 40 секунд:
пытался как то в php дописать

Код:

$smarty_arr
['subject'] = $subject;
$smarty_arr['message'] = $message;
 
$smarty->assign("smarty_arr"$smarty_arr); //смысл в том, чтобы не делать assign каждый раз, а только один передав сразу массив данных
    
$template_output $smarty->fetch("mail.tpl");
    echo 
$template_output;
    echo 
$array[$subject$message]; 
    return 
1
Ответ: Всё правильно работает,
$("#subject").html(response[0]);
$("#message").html(response[1]);
тегов с id subject и message нету
Вопрос: Как получать данные $subject и $message по AJAX?

как сделать чтоб переменные $subject и $message передавались по AJAX?
чтоб информация из бд выводилась в модальном окне

кнопка на которую при нажатии открывается модальное окно

Код HTML5
1
2
<a data-toggle="modal" data-target="#myModal" 
onclick="('mail.php?id={$email.id}')">
Код PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
if (isset($_SESSION['uid'])) {
    require "includes/smarty/Smarty.class.php";
    $smarty = new Smarty();
    $smarty->template_dir = "templates/" . $whmcs->get_sys_tpl_name() . "/";
    $smarty->compile_dir = $templates_compiledir;
    $smarty->assign("template", $whmcs->get_sys_tpl_name());
    $smarty->assign("LANG", $_LANG);
    $smarty->assign("companyname", $CONFIG['CompanyName']);
    $smarty->assign("logo", $CONFIG['SystemURL']);
    $id = $whmcs->get_req_var("id");
    $result = select_query("tblemails", "", array("id" => $id, "userid" => $_SESSION['uid']));
    $data = mysql_fetch_array($result);
    $date = $data['date'];
    $subject = $data['subject'];
    $message = $data['message'];
    $date = fromMySQLDate($date, "time");
    $smarty->assign("date", $date);
    $smarty->assign("subject", $subject);
    $smarty->assign("message", $message);
    $template_output = $smarty->fetch("mail.tpl");
    echo $template_output;
    return 1;
}


Код HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!-- Modal -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="false">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="false">&times;</span></button>
        <h4 class="modal-title" id="myModalLabel">
        <p><strong>Пользователь:</strong></p>
        <p><strong>Тема:</strong> {$companyname} {$logo} - {$subject}</p>
        <p><strong>от кого:</strong></p>
        <p><strong>Кому:</strong></p>
        </h4>
      </div>
      <div class="modal-body">{$message}</div>
      <div class="modal-footer">
        <button type="button" class="btn btn-primary" data-dismiss="modal">Закрыть</button>
      </div>
    </div>
  </div>
</div>
Добавлено через 2 минуты
у меня проблема в том что smarty парсер срабатывает до того, как я отправляю запрос в БД через GET, поэтому переменные пустые, а вот как по AJAX их отправить я не понимаю, помогите кто нибудь, кто силен в AJAX

Добавлено через 6 минут
может как то так должно быть?

Код Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function send()
{
 
       $.ajax({
                type: "GET",
                url: "mail.tpl",
                data: $("#myModal").serialize(),
                success: function(html) {
 
                        $("#myModalLabel").empty();
                        $("#myModalLabel").append(html);
                }
        });
 
}
Добавлено через 59 секунд
уже неделю понять не могу что этому коду надо никак не работает
Ответ: когда открывается модаль шрифт основной страницы меняется (больше или меньше становится не помню)
Вопрос: Подскажите, почему галочка с предидущего чекбокса, убирается только после обновления браузера?

Ребят, откройте мне глаза пжалст. Есть код:
PHP
1
2
3
4
                    <li>
                        <input type="checkbox" {if is_array($basefilters.brand) && in_array($brand.id, $basefilters.brand)}checked{/if} name="bfilter[brand][]" value="{$brand.id}" class="cb checkbox" id="cb_{$brand.id}_{$smarty.foreach.i.iteration}">
                        <label for="cb_{$brand.id}_{$smarty.foreach.i.iteration}">{$brand.title}</label>
                    </li>
Вставляю в него следующее:
Javascript
1
2
3
4
5
6
                <script>
                $('.checkbox').change(function(){
    $('input[name="' + $(this).attr('name') +'"]').removeAttr('checked);
    $(this).prop('checked', true);
});
</script>
Все работает, выбирается только один checkbox. Но подскажите почему галочка с предидущего чекбокса, убирается только после обновления браузера?
Ответ: Сделайте по человечески, как советовал silvershadow, через радиокноинпуты. По тому, что сам принцип работы типа checkbox представляет собой множественный выбор, а тип radio только один из группы.