Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”

Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - Cubes

Страницы: [1]
1
Возникла проблема следующего характера: при включенном статическом кэшировании возникает проблема перехода с мобильной версии на полную и наоборот. Более того, из принципа работы стат. кэша, получается, что если гость зашел на страницу, допустим, с мобильного браузера (http://moisait.ru/page), далее создается полная html-копия этой страницы, которая и отдается всем последующим гостям сайта (зашедшим на http://moisait.ru/page), при этом они получат именно html-копию c мобильной версии, независимо от того, с какого браузера они зашли.

Кто сталкивался с подобной проблемой? Какие пути решения возможны?
Спасибо!

2
Вот с этим "...selector делаем выборку, потом проходимся по массиву и получаем родительскую страницу" и есть проблема. Можете ткнуть, где посмотреть? Если вызываем getObjectList в "Раздел1", то для полученных объектов родительская страница - "Раздел1".

3
Собственно встала такая задача. Мы находимся в "Раздел1", в котором присутствует фильтр по цене (работающий и по вложенным каталогам). Задаем цену от 10 руб. до 15 руб, в результате получаем те разделы(выделены жирным), в объектах которых найдено совпадение(выделено красным).

Пример для наглядности:

Раздел1:
  - Подраздел1:
    -- Объект1 (цена: 11 руб.)
    -- Объект2 (цена: 14 руб.)
  - Подраздел2:
    -- Объект3 (цена: 13 руб.)
    -- Объект4 (цена: 20 руб.)
  - Подраздел3:
    -- Объект5 (цена: 16 руб.)
    -- Объект6 (цена: 21 руб.)

Соответственно на выходе получаем:

Найдено в разделах:
  - Подраздел1
  - Подраздел2
.

Насколько я пониманию, нужно писать кастомный макрос на основе getObjectList, однако в таком случае, если выводить родительскую категорию объекта, в котором найдено совпадение, может возникнуть проблема дублей (в "Подраздел1" есть 2 объекта, в которых найдено совпадение, соответственно "Подраздел1" будет выводится 2 раза). Поделитесь, если есть мысли в какую сторону смотреть и как это красиво реализовать. Работаю с TPL. Спасибо!

4
Отвечу сам на свой вопрос. При фильтрации формируются параметры в url: ?fields_filter["название поля"]="текст". Если в поисковой фразе есть пробелы, они заменяются на +. Например фраза: "Супер тонкий телевизор", будет в url "Супер+тонкий+телевизор". Фильтрация по текстовому полю осуществляются с помощью атрибута "Like" (т.е. ищем входит ли наша подстрока в целую строку), поэтому если искать "Супер телевизор", а в базе целая строка - "Супер тонкий телевизор", найдено ничего не будет! Поэтому нужно заменить пробел(+) на %(любое кол-во символов).
Если средствами js, то : .value.replace(new RegExp(" ",'g'),"%").

Остается проблема с порядком слов, т.е. если написать "телевизор тонкий", то поиск ничего не даст. Здесь уже надо переписывать сам метод фильтрации, как и в случае с частичным совпадением.

5
Забыл упомянуть, используется tpl.

6
Здравствуйте! Возникла проблема следующего характера: имеется фильтр по каталогу, одно из полей "Название", допустим один из объектов каталога содержит довольно длинную фразу в данном поле (например: "Супер тонкий телевизор"). Если вписать в фильтре в поле "Название" фразу "Телевизор тонкий", то ничего найдено не будет, так как фильтр ищет точное совпадение. Что в этом случае можно сделать? Можно ли реализовать, чтобы фильтр работал по частичному совпадению, т.е. по запросу "тонкие телевизоры" было что-то найдено? Спасибо!

8
Собственно задача стоит в том, чтобы в каталоге не выводить список объектов, пока пользователь не воспользуется фильтром. Можно ли это реализовать штатными средствами или придется писать кастомный макрос на основе %catalog viewObject()%?

9
Не поверите, но причина оказалась в Adblock. Так как этот плагин "умный", он блокирует все со словами реклама и баннеры, поэтому в админке у меня ничего не добавлялось и не отображалось. Вот такие дела)

10
Дошло дело до создания баннеров.
Захожу в модуль - "Баннеры", жму кнопку "добавить баннер", задаю необходимые данные на странице, жму "добавить", далее страница обновляется, но баннера в списке нет. Что делать? Где копать?)

Еще вопрос про расположение баннера в шаблоне (в модуле есть специальная вкладка). Я правильно понимаю, что мы ручками задаем идентификатор, а после указываем его в нужном месте в шаблоне определенной страницы в макросе %banners insert('идентификатор')% ?

11
Оказалось, как всегда все просто. Реализовал (наверняка коряво, но работает) следующим образом(привожу упрощенный пример, где проверяется только уникальность email):

Функция logincheck() в modules/users/__custom.php

public function logincheck(){




$object_id = $this->user_id;


$email = trim((string) getRequest('email'));


if (!$this->checkIsUniqueEmail($email, $object_id)) {
echo ("<span style='color:red'>ОШИБКА: пользователь с данным email уже существует</span>");

}
else {

// ниже, переделанная функция register_do (можно взять ее в исходном виде):

    if (!($template = getRequest('template'))) {
// ..........................................
$this->setEventPoint($oEventPoint);
}


exit();
}       

Не забываем дать права новой функции:
Создаем файл в classes/modules/users: permissions.custom.php

<?php
$permissions = Array(
      'login' => Array('logincheck')
  );
?>


Дальше создаем страницу с формой и скриптом, который будет обращаться к макросу и выдавать ответ (либо ошибку, либо запуск регистрации):

$(document).ready(function() {   
   
$("#IDФОРМЫ").submit(function(){                                               
var form = $(this);                                                           
                                                               
var data = form.serialize();                                           
$.ajax({
   type: "POST",
   url: "/udata/users/logincheck",
   dataType: "text",
   data: data,
   success: function(data){
     document.getElementById('ID_DIV_куда_выводим_сообщение').innerHTML = data;
   
       if (document.getElementById('ID_DIV_куда_выводим_сообщение').innerHTML == "") {       
         document.getElementById('ID_DIV_куда_выводим_сообщение').innerHTML = 'Пользователь успешно зарегистрирован!';
    }

    }
   });

return false;
});
});

12
Спасибо за наводку! Можете показать код переделанного макроса registrate_do или функции проверки? На конкретном примере быстрее разберусь.)

13
Здравствуйте. Собственно проблема в следующем: человек заполняет данные формы, которые AJAX запросом отправляются на сервер, а ему показывается сообщение об успешной регистрации, но как получить ответ от сервера, если при регистрации были допущены ошибки (допустим логин уже занят)?

Данные отправляются с помощью плагина jquery.form. Реализовано, примерно как тут:
http://wiki.umisoft.ru/Вебформы_на_ajax_tpl

Нужно переделать файл _register.php (/classes/modules/users), чтобы он передавал данные об ошибке на текущую страницу. Можно ли это сделать? Если, да дайте наводку как? В Ajax не силен, один не справлюсь, выручайте! :)

Страницы: [1]