proger.su

proger.su

+13
Репутация
0
Рейтинг
#2 Мультиязычность статей InstantCMS 2 30 сентября 2015 в 15:38
Здравствуйте!
Можно ли реализовать такую задачу в виде компонента (т. е. без вмешательства в код движка) сказать не могу, нужно смотреть все ли нужные события есть. Для себя я хардкодил, взял за основу Wordpress плагин qTranslate, дописал пару методов:
  1.  
  2. public static function langExist($lang = false) {
  3. $languages = self::getLanguages();
  4. return in_array($lang, $languages);
  5. }
  6.  
  7. public static function splitToLanguages($text = false, $quicktags = true) {
  8. if (!$text) { return false; }
  9.  
  10. $languages = self::getLanguages();
  11.  
  12. //init vars
  13. $split_regex = "#(<!--[^-]*-->|\[:[a-z]{2}\])#ism";
  14. $current_language = "";
  15. $matches = "";
  16. $result = array();
  17. foreach ($languages as $language) {
  18. $result[$language] = "";
  19. }
  20.  
  21. // split text at all xml comments
  22. $blocks = preg_split($split_regex, $text, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
  23. foreach ($blocks as $block) {
  24. # detect language tags
  25. if (preg_match("#^<!--:([a-z]{2})-->$#ism", $block, $matches)) {
  26. if (self::langExist($matches[1], $languages)) {
  27. $current_language = $matches[1];
  28. } else {
  29. $current_language = "invalid";
  30. }
  31. continue;
  32. // detect quicktags
  33. } elseif ($quicktags && preg_match("#^\[:([a-z]{2})\]$#ism", $block, $matches)) {
  34. if (self::langExist($matches[1], $languages)) {
  35. $current_language = $matches[1];
  36. } else {
  37. $current_language = "invalid";
  38. }
  39. continue;
  40. // detect ending tags
  41. } elseif (preg_match("#^<!--:-->$#ism", $block, $matches)) {
  42. $current_language = "";
  43. continue;
  44. // detect defective more tag
  45. }
  46. // correctly categorize text block
  47. if ($current_language == "") {
  48. // general block, add to all languages
  49. foreach ($languages as $language) {
  50. $result[$language] .= $block;
  51. }
  52. } elseif ($current_language != "invalid") {
  53. // specific block, only add to active language
  54. $result[$current_language] .= $block;
  55. }
  56. }
  57. return $result;
  58. }
  59.  
  60. public static function returnCurrentLangText($text = false, $return_lang = false){
  61. if (!$text) { return false; }
  62.  
  63. $config = cmsConfig::getInstance();
  64. $languages = self::getLanguages();
  65.  
  66. $result = self::splitToLanguages($text);
  67.  
  68. if (!$return_lang) {
  69. return $result[$config->language];
  70. } else {
  71. return self::langExist($return_lang, $languages) ? $result[$return_lang] : false;
  72. }
  73. }
  74.  
А затем в моделях вызывал по такому принципу:
  1.  
  2. if (isset($item['content'])) {
  3. $item['content'] = $core::returnCurrentLangText($item['content']);
  4. }
  5.  
Хотел запостить в блоге, кармы не хватает.
#1 [ЕСТЬ РЕШЕНИЕ] Роутинг ICMS2 15 сентября 2015 в 17:12
Здравствуйте!
Помогите сообразить как работает такого рода ссылка.


Как происходит изменение роутинга? Контроллера r в компоненте нету.

Спасибо!
#1 filterTimestampGt ICMS2 21 августа 2015 в 17:23
Здравствуйте!
Возникла такая проблема.
Есть запись с определенной датой публикации к примеру (2015-08-17 19:07:01), нужно получить записи которые были добавлены позже.
Воспользовался методом (дата в примере захардкожена для большей ясности):
  1.  
  2. $this->model->filterTimestampGt('date_pub', strtotime('2015-08-17 19:07:01'))->getCases();
  3.  
И все бы хорошо, но к результату цепляется запись с date_pub 2015-08-17 19:07:01
Затем попробовал тоже самое с помощью велосипеда
  1.  
  2. $this->model->db->query("SELECT * FROM cms_cases WHERE unix_timestamp(date_pub) > unix_timestamp('2015-08-17 19:07:01')");
  3.  
Результат одинаковый.

А если этот же запрос написать в phpMyAdmin то результат возвращается без записи с date_pub 2015-08-17 19:07:01

В чем прикол? ))

Спасибо!
#1 [ЕСТЬ РЕШЕНИЕ] Локация в ICMS2 21 августа 2015 в 15:20
Здравствуйте!

Нужно сделать автоопределения локации пользователей по ip, и исходя из его местоположения показывать контент.
И тут возникла небольшая проблема, айдишники городов которые возвращают api (https://find-ip.info/en/ или Яндекс.Карт) не совпадают с айдишниками городов в базе.

Кто знает откуда качали базу для ICMS2? Возможно там есть и API? Или может где можно слить другую базу?

Спасибо!
#1 [ЕСТЬ РЕШЕНИЕ] Отправка формы по ajax 13 августа 2015 в 15:56
Здравствуйте!
Помогите понять логику.
Для примера взял форму из админки.
  1.  
  2. if ($is_submitted){
  3.  
  4. // Проверяем правильность заполнения
  5. $errors = $form->validate($this, $data);
  6.  
  7. if (!$errors){
  8.  
  9. $data['items'] = explode(',', $data['items']);
  10. $content_model->moveContentItemsToCategory($ctype, $data['category_id'], $data['items'], $fields);
  11.  
  12. $template->renderJSON(array(
  13. 'errors' => false,
  14. 'callback' => 'contentItemsMoved'
  15. ));
  16.  
  17. }
  18.  
  19. if ($errors){
  20. $template->renderJSON(array(
  21. 'errors' => true,
  22. ));
  23. }
  24.  
  25. $this->halt();
  26.  
  27. }
  28.  
А в js стоит такая проверка:
  1.  
  2. if (result.errors == false) {
  3. if ("callback" in result) {
  4. window[result.callback](form_data);
  5. }
  6. return;
  7. }
  8.  
  9. if (typeof (result.errors) == 'object') {
  10.  
  11. $('.field_error', form).removeClass('field_error');
  12. $('.error_text', form).remove();
  13.  
  14. for (var field_id in result.errors) {
  15. var id = field_id.replace(':', '_');
  16. $('#f_' + id, form).addClass('field_error');
  17. $('#f_' + id, form).prepend('<div class="error_text">' + result.errors[field_id] + '</div>');
  18. }
  19.  
  20. icms.modal.resize();
  21.  
  22. return;
  23.  
  24. }
  25.  
Ошибку проверяет на объект. Но ведь мы туда передаем true, это же не объект.
Если я по такому же принципу делаю свою форму, то у меня работает только если форма заполнена, а когда ошибка, то понятно что не срабатывает.
Но как тогда оно работает в админке? )))
#1 [ЕСТЬ РЕШЕНИЕ] Кеширование в ICMS2 27 июля 2015 в 10:54
Здравствуйте!
Периодически встречаю такого рода методы:
  1. $this->useCache("users.user.{$id}");
Подскажите пожалуйста, они работают только когда в админке включено кеширование?
Спасибо.
#15 [ЕСТЬ РЕШЕНИЕ] Взаимодействие с БД 27 июля 2015 в 09:36

Не совсем понятно, что вы хотели показать кодом.

Val
Хотел показать, что я имею ввиду под фразой "получить данные пользователя".
Спасибо. Плюс в карму. )
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.