Imagesforyou.ru

IMG FOR YOU — ИНТЕРЬЕРНАЯ ФОТОСТУДИЯ
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

7 смертных грехов разработки на 1С-Битрикс

Изменение всего, что лежит в папке /bitrix/ — табу.

Если вам нужно изменить шаблон компонента — копируйте его в шаблон сайта.

Если вам нужно изменить компонент — используйте result_modifier.php, component_epilog.php (про них я подробно писал в этой статье), напишите свой компонент, в конце концов.

Если вам нужно изменить модуль — медицина бессильна пишите свой, наследуйтесь от стандартных.

Если вы не послушаетесь и дадите слабину хотя бы в одном – можете попрощаться с беззаботным обновлением платформы. А такая необходимость рано или поздно настанет. Не говоря о том, что искать файлы будет сложнее.

Для пользовательских модулей/компонентов/шаблонов/обработчиков должна использоваться папка /local/.

Добавляйте папку /bitrix/ в .gitignore. Если в вашем git репозитории есть файлы /bitrix/, значит, скорее всего, что-то вы делаете не так. Вы можете подумать, что есть исключения. Да, но прибегать к созданию чего-либо в папке Bitrix нужно только если по-другому никак.

Решаем ошибку db query error

Ранее у меня была установка bitrix на centos. Причин у данной ошибки может быть несколько и мы их рассмотрим все. Для начала приведу пример скриншота, как выглядит ошибка db query error please later, согласитесь не очень информативно.

db query error please try later-2

Закончилось свободное место

Да такое бывает у вас может закончиться место на локальном диске и Centos просто не может уже куда либо писать, и вы ловите эту ошибку. Для того, чтобы проверить есть ли у вас свободное пространство вам необходимо подключиться к серверу по ssh протоколу и ввести вот такую команду.

Вы получите сводку по разделам, в моем примере места свободного достаточно.

db query error please try later-3

Повредилась база данных Mysql

Вторая причина, уже посерьезнее и она кроется в том, что у вас поломалась табличка или если угодно база данных Mysql. Чтобы это выяснить вам, потребуется включить дебагер. Нам нужно включить один параметр вот в этом файле.

Для того, чтобы его отредактировать я вам советую зайти по sftp-ssh соединению, как это сделать я описывал в заметке Как зайти на ftp сервер хостинга. Единственно, что когда будите создавать подключение выбирайте sftp-ssh. Еще может так же помочь утилита WinSCP 5.7.6, делает она тоже самое. И та и другая просто файловые менеджеры.

Открываем этот файл и находим переменную $DBDebug = false; Изменяем ее значение на $DBDebug = true ; Обратите внимание, что в этом файле есть такие полезные параметры как:

  • $DBLogin > логин к базе данных
  • $DBPassword > пароль
  • $DBName > имя базы данных
Читайте так же:
Видеокамера с хорошим микрофоном

db query error please later

В итоге теперь обновив страницу сайта я получил

MySQL Query Error: SELECT ID, SESSION_DATA FROM b_stat_session_data WHERE GUEST_MD5 = ’71dbd5e22cd7ad7065e17a7eb6940a59′ and DATE_LAST > DATE_ADD(now(), INTERVAL — 1440 SECOND) LIMIT 1 [Table ‘./edisclosure2009/b_stat_session_data’ is marked as crashed and last (automatic?) repair failed]

От сюда видно, что у меня по крошилась база данных edisclosure2009, значит ее нужно восстановить, не забудьте заново поставить $DBDebug = false, так как может дико тормозить сайт. Я для этого использую утилиту EMS SQL Manager for MySQL. Открываете ее и переходите в пункт Запустить SQL Manager for MySQL.

Ошибка db query error please try later на сайте 1С битрикс-1

Имя хоста оставляете localhost, так и должно быть, ваш порт 3306 не должен светиться наружу. Далее указываем логин и пароль от базы данных и ставим галку Использовать туннелирование.

Ошибка db query error please try later на сайте 1С битрикс-2

Задаем ip адрес или dns имя сервера к которому мы будем подключаться по ssh соединению, и указываем логин и пароль для доступа.

Ошибка db query error please try later на сайте 1С битрикс-3

Указываем имя базы данных сайта на битриксе 1С. Я еще обычно ставлю опцию Автоподключение при запуске.

Ошибка db query error please try later на сайте 1С битрикс-4

Теперь выбираете в левой части вашу базу данных и щелкаете по ней правым кликом, выбираете из контекстного меню Подключиться к базе данных.

Ошибка db query error please try later на сайте 1С битрикс-5

Все теперь выбираете базу и из меню Службы выбираете Восстановление таблиц. После не долгой процедуры вы исправите ошибку db query error please try later на сайте 1С битрикс.

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

init.php подключение в прологе

То есть, в нем мы можем размещать код, который необходим для выполнения на каждой странице сайта.

Последовательность очереди подключения можно посмотреть в документации по битрикс, переходим на сайт документации для разработчиков, воспользуемся поиском, введем «страница подключение» и тут видим, первое идет подключение пролога, а за тем наш init.php .

Документация 1С Битрикс

Если в системе несколько сайтов, то делается отдельная директория с ID сайтом, где для каждого сайта можем создать индивидуальный init.php .

Расположение, создание файла init.php

Сам файл init.php располагается в структуре сайта, в папке bitrix > php_interface > init.php и как упоминал выше он не обязательный, а следовательно, может вовсе там отсутствовать.

Давайте его создадим через административную часть, жмем кнопку добавить, выбираем из списка «Добавить файл». Перед нами появилась форма по созданию нового файла, укажем редактировать через PHP , прописываем название нашего файла init.php , из области редактирования все удаляем.

Читайте так же:
Вконтакте вход ввести логин и пароль

Для примера, определим в нем свою константу:

Нажмем кнопку Применить.

Затем перейдем на сайт, откроем тестовую страничку и в режиме кода вызываем константу <? echo STRING; ?> которую определяли в init , сохраняемся.

Получаем вывод значении dwstv. То есть, таким образом можно работать как при использовании стандартных функций php, а также писать свой код или задействовать API битрикс.

Функция распечатки массива

Для примера создадим свою функцию, которая будет принтовать переданный в неё массив в удобном оформлении для разработчика.

Открываем init.php на редактирование, вставляем свой код функции, и разберем, как она работает.

Функция принимает один обязательный параметр, $var в который передаем массив, и два не обязательных параметра, $die и $all .

В моем случае я в начале проверяю пользователя на его ID , то есть только принтую данный массив себе, если желаете вывести массив для администраторов тогда можно воспользоваться методом $USER->IsAdmin() который позволяет распечатать массив для группы администраторов.

Что бы ознакомиться с методом $USER->IsAdmin() более подробно, перейдите в документацию 1С — битрикс, в поиске пропишите IsAdmin , вот у нас есть его описание, мы видим что данный метод делает и какие его параметры использования.

Возвращаемся к нашей функции, пишем оператор (ИЛИ), где является данный параметр $all равный true . Это сделано для возможности распечатать массив без авторизации.

Ниже принтовка в оформлении, а затем условие на завершение всех операций после отработки скрипта. Этим параметром пользуюсь, когда необходимо.

Сохранимся и перейдем на тестовую страничку. Пропишем простенький массив:

И распринтуем его с помощью нашей функции <?PR($arr)?>

Сохранимся, как видим, появилась распечатка массива.

распечатка массива

Если мы сейчас разлогинимся то массив нам не отобразится.

Давайте теперь повторно авторизуемся и добавим в нашу функцию дополнительный параметру $all какое ни будь значение, и теперь этот массив будут видеть все пользователи в том числе, не авторизованные.

Тоже самое если нам нужно завершить все операции, тогда для параметра $die введем значение и сохранимся.

Как видите, с правой стороны исчез правый сайтбар, снизу пропал footer .

Отключение footer

Таким образом, работает данный скрипт, кто желает скачать его код, ссылка в верху под видео.

Как правильно писать код в init.php

Часто встречаются, что некоторые разработчики в файл init.php начинают беспорядочно заносить свои код, его становится много, выглядит он не структурировано, и превращается это все в свалку, где самому разработчику сложно разобраться в дальнейшем.

Захламленность init.php

Битрикс в этом случае рекомендует разбивать код логическими группами, по отдельным файлам и классам, подключая их через директиву include .

Читайте так же:
Восстановление imei 4pda mtk

Давайте прислушаемся к рекомендации, и весь код подключим отдельно.

Для этого откроем init.php , скопируем весь наш код который до этого вносили Переходим в папку include , если у Вас ее нет, создайте, в ней размещаем файл functions-dump.php и перенесем полностью нашу функцию с init.php , сохранимся.

Создаем отдельный файл под функцию распечатки

В init.php в место функции подключаем файл functions-dump.php , для этого прописываем условие на проверку file_exists .

С помощью [H1toH2]
SERVER[«DOCUMENT_ROOT»] подключаемся к корню нашего сайта, далее пишем путь до файла и если он присутствует, при помощи директивы require_once подключаем его к init.php

Сохраняемся, и мы получили вот такую ошибку.

Parse error: syntax error, unexpected ‘/’ in /home/httpd/vhosts/dws.mcdir.ru/httpdocs/bitrix/php_interface/init.php on line 1

Как избежать такого рода ошибок

Я специально допустил синтаксическую ошибку, что бы Вам показать, как при редактировании файла init.php можно получить ошибку, которая полностью отрубит сайт, как визуальную, так и его административную части.

Как избежать ошибок в файле init.php

Как можно работать через Веб

Если у Вас доступ для работы с сайтом через веб, тогда наиболее простой способ, нужно содержание файла init.php вынести в отдельный файл и подключить его другим способом в init .

Давайте покажу, как это все делается. В первую очередь исправлю ошибку.

Допустим, у нас не было ошибки, но мы знаем о том, что такое может случиться. Перейдем, в наш init.php , переносим код из файла. Далее пройдем в нашу директорию include создаем тут файл initswitch.php сохраняемся.

Открываем на редактирование init.php , и в нем прописываем следующее условие подключение.

Давайте сохранимся и посмотрим, все ли у нас работает. Для этого перейдем на тестовую страницу, и видим, что массив у нас отображается, все работает, замечательно.

Теперь все подключать будем при помощи initswitch.php . И так, перейдем в него и повторим нашу ошибку, открываем initswitch.php , допускаем синтаксическую ошибку, и сохраняемся.

Сайт отрубился, как административная часть, так и визуальная его часть не доступна.

Теперь что бы его реанимировать, нам нужно в адресной строке прописать параметр, тем самым производим отключение файла initswitch.php , а параметр &noinit=N как вы догадались, наоборот его включает.

Тут же не выходя, открываем адресную строку и прописываем параметр &noinit=Y , мы попали в админку а дальше дело техники.

Параметр для включения файла init.php

Мое личное мнение, все же рекомендую работать с файлом init.php через FTP, так как не совсем удобно кодировать через редактор и править такого рода ошибки.

Читайте так же:
Видео и питание по витой паре

И так, придерживаясь данных правил:

  • не пишите напрямую код в init.php ;
  • используйте отдельный файл для хранения функционала;
  • и все файлы в init.php подключайте через require_once() .

Кому понравилось материал обязательно поделитесь им в социальных сетях, статью подготовил Горелов Денис.

[/H1toH2]

Запускаем проверку системы

В Битриксе есть инструмент «Проверка системы», который помогает найти причины проблем в работе сайта. У нас никаких проблем и ошибок в работе сайта нет, но после установки Битрикса все-таки стоит запустить этот инструмент. В админ панели идем в раздел Настройки => Инструменты => Проверка системы и нажимаем кнопку «Начать тестирование»:

Запускаем проверку системы

В моем случае есть несколько ошибок и замечаний, а именно:

Ошибки default_socket_timeout и max_input_vars Замечание про агенты Замечание про длинные строки Ошибка переменной sql_mode

Справа у каждого пункта есть иконка вопроса, нажав на которую можно получить подробную информацию. Разберем эти ошибки.

Эти две ошибки можно исправить, добавив 2 строчки в файл .htaccess, который лежит в корне сайта:

Это не критичное замечание. Пока что не будем вникать в то, что собой представляют Агенты в Битриксе. Просто отмечу, что до тех пор, пока вы не создаете своих Агентов, можно не беспокоиться о переводе Агентов на CRON.

И это замечание тоже не критично, если сайт работает без ошибок – это предупреждение можно игнорировать (на моей практике из-за него никогда не возникало проблем).

Кликаем на знак вопроса справа от этого пункта и получаем решение проблемы:

Решение проблемы с sql_mode

Вносим указанный код в указанные файлы.

После исправления всех ошибок заново запустим тестирование системы, чтобы убедиться, что в этот раз всё в порядке. Если всё в порядке – поздравляю, можете переходить к следующему уроку 🙂

План действий по оптимизации скорости загрузки Битрикс

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

На старте работ провели полный аудит, выявили ошибки, составили план и чек-лист оптимизации скорости сайта:

  • Перенос на VDS и настройка сервера
  • Проверка системы
  • Работа с БД
  • Минификация исходного кода страницы, css и js файлов
  • Оптимизация изображений
  • Оптимизация JS

Как включить вывод ошибок через .htaccess

Файл .htaccess должен находиться в корневой директории сайта (например, «public_html»). Отредактировать его можно с помощью проводника, доступного в панели хостинга.

Примечание. Если файла .htaccess нет, то его необходимо создать.

Включить отображение ошибок PHP и настроить фильтрацию их вывода можно двумя директивами: «display_errors» и «error_reporting». Первая отвечает за состояние режима показа ошибок («On» или «Off»), а вторая задаёт глубину отображения.

Читайте так же:
База данных с паролями mail ru

Показать ошибки PHP на экране можно с помощью следующего кода:

После сохранения изменённого файла, следует обновить страницу.

Комментарии

Цитата
Алекс пишет:
А как сайт-нэйм прописать в шаблон?
доменное имя
Цитата
Гость сайта пишет:
Объясните про Отображаемые счетчики, так как инфы про это найти невозможно( В настройке модуля — «поисковая оптимизация» я вставляю коды счетчиков. Но в исходном коде страниц их нет, код я просматриваю выйдя из режима администратора. Как правильно использовать модуль — «поисковая оптимизация»
Цитата
Гость сайта пишет:
Объясните про Отображаемые счетчики, так как инфы про это найти невозможно( В настройке модуля — «поисковая оптимизация» я вставляю коды счетчиков. Но в исходном коде страниц их нет, код я просматриваю выйдя из режима администратора. Как правильно использовать модуль — «поисковая оптимизация»
Цитата
))) Да яж не про то спрашиваю) а про — про Отображаемые счетчики и про — В настройке модуля — «поисковая оптимизация» я вставляю коды счетчиков. Но в исходном коде страниц их нет, код я просматриваю выйдя из режима администратора. Как правильно использовать модуль — «поисковая оптимизация»

Да, видимо я не понимаю где Вы умудряетесь вставить коды счетчика. Вот тут?:

Этот раздел предназначен для базовой поисковой оптимизации сайта. Регистрируетесь в Яндексе и Гугле. Потом уже через админку сайта добавляете сайт в эти поисковые системы на свои учетки.

Если Вы имете ввиду старую версию битрикса, когда раздел SEO назывался «Поисковая оптимизация», то эти счетчики на сайте не отобразятся. Они только для внутренней статистики (в админке сайта-раздел Веб Аналитика) там и переходы, и хиты и хосты и внешние ссылки- все покажет.
Если прямо сильно хочется вывести счетчик на сайт- то Компоненты- Служебные- Статистика- и вытягиваете в нужно место компонент «Таблица статистики»

Цитата
Сергей пишет:
Куда нужно вставить код на форму SmartResponder (рассылка писем) ?
1. В Index.html?
2. Или её можно вывести с помощью специальной функции?
Цитата
Сергей пишет:
Куда нужно вставить код на форму SmartResponder (рассылка писем) ?
1. В Index.html?
2. Или её можно вывести с помощью специальной функции?

Михаил, посдскажите как вывести Название раздела или подраздела инфоблока в виде текста.
А так же символьный код раздела тоже в виде текста.

голоса
Рейтинг статьи
Ссылка на основную публикацию
Adblock
detector