Часто задаваемые вопросы и другие способы устранения неполадок
Ниже приведены некоторые часто задаваемые вопросы о Elgg.
Содержание
Общее
См.также
«Плагин не может запуститься и был деактивирован» или «Этот плагин недействителен»
Эта ошибка обычно сопровождается дополнительными сведениями, объясняющими, почему плагин недействителен. Обычно это вызвано неправильно установленным плагином.
Если вы устанавливаете плагин с именем «test», в каталоге mod будет создана директория test. В этой директории должен находиться файл composer.json по пути /mod/test/composer.json.
- Если этот файл отсутствует, это может быть вызвано:
установкой плагина в неверную директорию
созданием директории под /mod, которая не содержит плагин
ошибкой при передаче через ftp
распаковкой плагина в лишнюю директорию (myplugin.zip распаковывается в
myplugin/myplugin)несовместимым плагином
Если вы используете хост на базе Unix и файлы существуют в правильной директории, проверьте права доступа. Elgg должен иметь права на чтение файлов и права на чтение + выполнение для директорий.
Белая страница (WSOD)
- Пустая белая страница (часто называемая «белым экраном смерти») означает наличие синтаксической ошибки PHP. Возможные причины этого:
повреждённый файл — попробуйте снова передать код на ваш сервер
вызов модуля php, который не был загружен — это может произойти после установки плагина, требующего определённый модуль.
некачественный плагин — не все плагины написаны одинаково качественно, поэтому следует внимательно относиться к тому, какие из них вы устанавливаете.
Чтобы найти, где происходит ошибка, измените файл .htaccess для отображения ошибок в браузере. Установите display_errors в 1 и снова загрузите ту же страницу. Вы должны увидеть ошибку PHP в вашем браузере. Верните настройку обратно после решения проблемы.
Примечание
Если вы используете плагин Developer’s Tools, перейдите на страницу его настроек и убедитесь, что опция «Display fatal PHP errors» включена.
Если белый экран вызван некачественным плагином, удалите последние установленные плагины, удалив их директории, а затем перезагрузите страницу.
Примечание
Вы можете временно отключить все плагины, создав пустой файл по пути mod/disabled. Затем вы можете отключить проблемный модуль через панель инструментов администратора.
Если вы получаете WSOD при выполнении действия, например, при входе в систему или публикации блога, но сообщений об ошибках нет, это, скорее всего, вызвано непечатаемыми символами в коде плагина. Проверьте плагин на наличие пробелов/символов новой строки после закрывающего тега php (?>) и удалите их.
Страница не найдена
Если вы недавно установили ваш сайт Elgg, наиболее вероятной причиной ошибки «страница не найдена» является то, что mod_rewrite настроен неправильно на вашем сервере. Информация об исправлении этого есть на странице Install Troubleshooting. Вторая наиболее вероятная причина — неверный url вашего сайта в базе данных.
Если ваш сайт работал какое-то время и вдруг начали появляться ошибки «страница не найдена», вам нужно спросить себя, что изменилось. Добавляли ли вы какие-либо плагины? Меняли ли вы конфигурацию сервера?
Для отладки ошибки «страница не найдена»:
Убедитесь, что ссылка, ведущая к отсутствующей странице, верна. Если нет, как генерируется эта ссылка?
Убедитесь, что правила перезаписи
.htaccessприменяются.
Несоответствие токена входа
Если вам приходится входить на сайт дважды, и сообщение об ошибке после первой попытки говорит о несоответствии токена, URL в настройках Elgg не совпадает с URL, используемым для доступа к нему. Наиболее частая причина этого — добавление или удаление «www» при доступе к сайту. Например, www.elgg.org против elgg.org. Это вызывает проблему с обработкой сессий из-за того, как веб-браузеры сохраняют куки.
Чтобы исправить это, вы можете добавить правила перезаписи. Для перенаправления с www.elgg.org на elgg.org в Apache правила могут выглядеть так:
RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^elgg\.org
RewriteRule (.*) http://elgg.org/$1 [R=301,L]
Перенаправление с non-www на www может выглядеть так:
RewriteCond %{HTTP_HOST} ^elgg\.org
RewriteRule ^(.*)$ http://www.elgg.org/$1 [R=301,L]
Если вы не знаете, как настроить правила перезаписи, обратитесь к вашему хостинг-провайдеру за дополнительной информацией.
В форме отсутствуют поля __token или __ts
Все действия Elgg требуют токен безопасности, и эта ошибка возникает, когда этот токен отсутствует. Это либо проблема с конфигурацией вашего сервера, либо со сторонним плагином.
Если вы сталкиваетесь с этим на новой установке, убедитесь, что ваш сервер правильно настроен и ваши правила перезаписи верны. Если вы сталкиваетесь с этим при обновлении, убедитесь, что вы обновили правила перезаписи либо в .htaccess (Apache), либо в конфигурации сервера.
Если вы сталкиваетесь с этим, отключите все сторонние плагины и попробуйте снова. Очень старые плагины для Elgg не используют токены безопасности. Если проблема исчезает при отключении плагинов, это связано с плагином, который должен быть обновлён его автором.
Режим обслуживания
Чтобы временно отключить ваш сайт, перейдите в Administration -> Utilities -> Maintenance Mode. Заполните форму и нажмите Сохранить, чтобы отключить ваш сайт для всех, кроме пользователей с правами администратора.
Отсутствующее письмо
Если ваши пользователи сообщают, что письма с подтверждением не приходят, попросите их проверить папку со спамом. Возможно, письма, отправляемые с вашего сервера, помечаются как спам. Это зависит от многих факторов, таких как наличие проблем со спамерами у вашего хостинг-провайдера, как настроена ваша почтовая конфигурация PHP, какой агент передачи почты использует ваш сервер, или ограничение хостом количества писем, которые вы можете отправить за час.
Если никто вообще не получает письма, весьма вероятно, что ваш сервер не настроен правильно для отправки почты. Ваш сервер нуждается в программе для отправки писем (называемой Mail Transfer Agent — MTA), и PHP должен быть настроен для использования MTA.
Чтобы быстро проверить, правильно ли настроены PHP и MTA, создайте файл на вашем сервере со следующим содержимым:
<?php
$address = "your_email@your_host.com";
$subject = 'Test email.';
$body = 'If you can read this, your email is working.';
echo "Attempting to email $address...<br />";
if (mail($address, $subject, $body)) {
echo 'SUCCESS! PHP successfully delivered email to your MTA. If you don\'t see the email in your inbox in a few minutes, there is a problem with your MTA.';
} else {
echo 'ERROR! PHP could not deliver email to your MTA. Check that your PHP settings are correct for your MTA and your MTA will deliver email.';
}
Обязательно замените «your_email@your_host.com» на ваш реальный адрес электронной почты. Не забудьте оставить кавычки вокруг него! Когда вы откроете эту страницу через веб-браузер, она попытается отправить тестовое письмо. Этот тест покажет, правильно ли настроены PHP и ваш MTA. Если он не удастся — либо вы получите ошибку, либо вы никогда не получите письмо — вам потребуется провести дополнительное расследование и, возможно, связаться с вашим провайдером услуг.
Полная настройка MTA и почтовой функциональности PHP выходит за рамки этого FAQ, и вам следует поискать в интернете дополнительные ресурсы по этой теме. Некоторую базовую информацию о параметрах php можно найти на сайте PHP
Логи сервера
Скорее всего, вы используете Apache в качестве вашего веб-сервера. Предупреждения и ошибки записываются веб-сервером в лог и могут быть полезны для отладки проблем. Обычно вы увидите два типа файлов логов: логи доступа и логи ошибок. Информация от PHP и Elgg записывается в лог ошибок сервера.
Linux — лог ошибок, вероятно, находится в /var/log/httpd или /var/log/apache2.
Windows — вероятно, находится внутри вашей директории Apache.
Mac OS — лог ошибок, вероятно, находится в /var/log/apache2/error_log
Если вы используете общий хостинг без доступа по ssh, ваш хостинг-провайдер может предоставлять механизм для получения доступа к логам вашего сервера. Вам нужно спросить их об этом.
Как работает регистрация?
При настройке по умолчанию регистрация работает следующим образом:
Пользователь заполняет форму регистрации и отправляет её
Учётная запись пользователя создаётся и отключается до подтверждения
Пользователю отправляется письмо со ссылкой для подтверждения учётной записи
Когда пользователь нажимает на ссылку, учётная запись подтверждается
Теперь пользователь может войти в систему
Сбои в этом процессе включают ввод пользователем неверного адреса электронной почты, пометку письма с подтверждением как спам, или то, что пользователь никогда не подтверждает учётную запись.
Подтверждение пользователя
По умолчанию все пользователи, регистрирующиеся самостоятельно, должны подтвердить свои учётные записи через электронную почту. Если у пользователя возникают проблемы с подтверждением учётной записи, вы можете подтвердить пользователей вручную, перейдя в Administration -> Users -> Unvalidated.
Вы можете убрать это требование, деактивировав плагин User Validation by Email.
Примечание
Удаление подтверждения имеет некоторые последствия: нет способа узнать, что пользователь зарегистрировался с рабочим адресом электронной почты, и это может оставить вашу систему открытой для спамеров.
Добавить пользователя вручную
Чтобы добавить пользователя вручную, в разделе управления перейдите в Users. Там вы увидите ссылку с названием «Add new User». После заполнения информации и отправки формы новый пользователь получит письмо с именем пользователя и паролем, а также напоминание сменить пароль.
Примечание
Elgg не принуждает пользователя сменить пароль.
Я создаю или только что установил новую тему, но графика или другие элементы не работают
Убедитесь, что тема находится в конце списка плагинов.
Очистите кэш браузера и перезагрузите страницу. Чтобы снизить нагрузку на сервер, Elgg инструктирует браузер редко загружать файл CSS. Новая тема полностью изменит файл CSS, и обновление должно заставить браузер снова запросить файл CSS.
Если вы создаёте или изменяете тему, убедитесь, что вы отключили simple и system кэши. Это можно сделать, включив плагин Developer Tools, затем перейдя в Administration -> Develop -> Settings. Как только вы будете довольны изменениями, включите кэши, иначе производительность пострадает.
Изменение полей профиля
В настройках администрирования Elgg есть страница для замены полей профиля по умолчанию. По умолчанию Elgg предоставляет администратору два варианта:
Использовать поля профиля по умолчанию
Заменить набор по умолчанию на набор пользовательских полей профиля
Вы не можете добавить новые поля профиля к полям по умолчанию. Добавление нового поля профиля через опцию замены полей профиля очищает поля по умолчанию. Перед тем как допустить пользователей, лучше всего определить, какие поля профиля вы хотите, какими должны быть типы полей и в каком порядке они должны отображаться. Вы не можете изменить тип поля или порядок или удалить поля после их создания без полного очищения профиля.
Большую гибкость можно получить через плагины. На сайте сообщества есть как минимум два плагина, которые позволяют получить больший контроль над полями профиля. Плагин Profile Manager стал довольно популярным в сообществе Elgg. Он позволяет добавлять новые поля профиля в любое время, изменять порядок, группировать поля профиля и добавлять их в регистрацию.
Изменение регистрации
Процесс регистрации можно изменить через плагин. Всё, что касается регистрации, можно изменить: внешний вид, различные поля регистрации, дополнительную валидацию полей, дополнительные шаги и так далее. Такие изменения требуют базовых знаний HTML, CSS, PHP.
Другой вариант — использовать плагин Profile Manager, который позволяет добавлять поля как в профили пользователей, так и в форму регистрации.
- Создать скелет плагина
- Изменение отображения регистрации
Переопределить view
account/forms/register- Изменение обработчика действия регистрации
Вы можете написать своё собственное действие для создания учётной записи пользователя
Как изменить настройки PHP с помощью .htaccess?
Возможно, вы захотите изменить настройки php в вашем файле .htaccess. Это особенно актуально, если ваш хостинг-провайдер не предоставляет вам доступ к файлу php.ini сервера. Переменные могут быть связаны с ограничениями размера загружаемых файлов, безопасностью, длительностью сессии или любым другим количеством атрибутов php. Примеры того, как это сделать, см. в документации PHP по этому вопросу.
HTTPS вход случайно включён
Если вы включили вход через HTTPS, но не настроили SSL, вы теперь заблокированы от вашей установки Elgg. Чтобы отключить этот параметр конфигурации, вам нужно отредактировать вашу базу данных. Используйте такой инструмент, как phpMyAdmin, для просмотра вашей базы данных. Выберите таблицу config и удалите строку с именем https_login.
Использование тестового сайта
Рекомендуется всегда пробовать новые релизы или новые плагины на тестовом сайте перед запуском их на продакшн-сайте (сайте с реальными пользователями). Самый простой способ сделать это — поддерживать отдельную установку Elgg с тестовыми учётными записями. При тестировании изменений важно использовать тестовые учётные записи, не являющиеся администраторами, чтобы протестировать то, что увидят ваши пользователи.
Более реалистичный тест — зеркалировать контент с вашего продакшн-сайта на тестовый сайт. Следуя инструкциям для duplicating a site. Затем убедитесь, что вы предотвращаете отправку писем вашим пользователям. Вы можете написать небольшой плагин, который перенаправляет все письма на вашу собственную учётную запись (учтите плагины, которые включают собственный код отправки почты, поэтому вам придётся модифицировать эти плагины). После этого вы можете просмотреть весь контент, чтобы убедиться, что обновление или новый плагин функционирует как задумано и ничего не ломает. Если этот процесс кажется сложным, пожалуйста, придерживайтесь запуска простого тестового сайта.
500 — Внутренняя ошибка сервера
Что это?
500 — Internal Server Error означает, что веб-сервер столкнулся с проблемой при обслуживании запроса.
Возможные причины
- Конфигурация веб-сервера
Наиболее частая причина этого — неправильно настроенный сервер. Если вы отредактировали файл
.htaccessи добавили что-то неверное, Apache отправит ошибку 500.- Права доступа к файлам
Это также может быть проблемой прав доступа к файлу. Apache должен иметь возможность читать файлы Elgg. Использование прав 755 для директорий и 644 для файлов позволит Apache читать файлы.
Когда я загружаю фото или меняю аватар профиля, я получаю белый экран
Скорее всего, у вас не установлена или неправильно настроена библиотека PHP GD. Вам может потребоваться помощь администратора вашего сервера.
Отсутствует CSS
Неверный URL
Иногда люди устанавливают Elgg так, что базовый URL — это localhost, а затем пытаются просмотреть сайт, используя имя хоста. В этом случае браузер не сможет загрузить файл CSS. Попробуйте просмотреть исходный код веб-страницы и скопировать ссылку на файл CSS. Вставьте её в ваш браузер. Если вы получите ошибку 404, вероятно, это и есть ваша проблема. Вам нужно будет изменить базовый URL вашего сайта.
Синтаксическая ошибка
Elgg хранит свой CSS как код PHP для обеспечения гибкости и мощности. Если есть синтаксическая ошибка, файл CSS, отправляемый в браузер, может быть пустым. Отключение несвязанных плагинов — рекомендуемый первый шаг.
Ошибки правил перезаписи
Неправильный файл .htaccess также может привести к ошибке 404 при запросе файла CSS. Это может произойти при обновлении и забывании также обновить .htaccess.
Следует ли мне редактировать базу данных вручную?
Предупреждение
Нет, вам никогда не следует редактировать базу данных вручную!
Сломает ли ручное редактирование базы данных мой сайт?
Да.
Могу ли я добавить дополнительные поля в таблицы базы данных?
(Или: я не понимаю модель данных Elgg, поэтому собираюсь добавить столбцы. Вы поможете?)
Нет, это плохая идея. Изучите модель данных, и вы увидите, что если это не очень специфическая и высоко кастомизированная установка, вы можете сделать всё, что вам нужно, в рамках текущей модели данных Elgg.
Я хочу удалить пользователей. Не могу ли я просто удалить их из таблицы elgg_entities?
Нет, это повредит вашу базу данных. Удаляйте их через сайт.
Я хочу удалить спам. Не могу ли я просто найти и удалить его из таблицы elgg_entities?
Нет, это повредит вашу базу данных. Удаляйте его через сайт.
Кто-то на сайте сообщества сказал мне отредактировать базу данных вручную. Стоит ли?
Кто это был? Это кто-то опытный с Elgg, например, один из основных разработчиков или известный автор плагинов? Дал ли он или она вам чёткие и конкретные инструкции, что редактировать? Если вы не знаете, кто это, или если вы не можете понять или не чувствуете себя комфортно, следуя инструкциям, не редактируйте базу данных вручную.
Я знаю PHP и MySQL и у меня есть законная причина редактировать базу данных. Можно ли редактировать базу данных вручную?
Убедитесь, что вы сначала понимаете модель данных и схему Elgg. Сделайте резервную копию, редактируйте осторожно, затем тщательно протестируйте.
Проблема входа в Internet Explorer (IE)
Канонический URL
IE не любит работать с сайтами, которые используют как http://example.org, так и http://www.example.org. Он сохраняет несколько куки, и это вызывает проблемы. Лучше использовать только один базовый URL. Подробную информацию о том, как это сделать, см. в ошибке Login token mismatch.
Chrome Frame
Использование chrome frame внутри IE может нарушить процесс входа.
Письма не поддерживают нелатинские символы
Для поддержки нелатинских символов (таких как кириллица или китайские) Elgg требует, чтобы поддержка многбайтовых строк была скомпилирована в PHP.
Во многих установках (например, Debian и Ubuntu) это включено по умолчанию. Если это не так, вам нужно включить это (или перекомпилировать PHP, чтобы включить это). Чтобы проверить, поддерживает ли ваш сервер многбайтовые строки, проверьте phpinfo.
Длительность сессии
Длительность сессии контролируется вашей конфигурацией php. Сначала вам нужно найти ваш файл php.ini. В этом файле будут несколько переменных сессии. Полный список и то, что они делают, можно найти в руководстве php.
У файла отсутствует владелец
Есть три причины этой ошибки. У вас может быть сущность в базе данных, у которой owner_guid равен 0. Это должно быть крайне редко и может произойти только если ваша база данных/сервер аварийно завершает работу во время операции записи.
Вторая причина — сущность, владелец которой больше не существует. Это может произойти, если плагин, участвовавший в создании сущности, отключён, а затем владелец удалён, но операция удаления не удалась (потому что плагин отключён). Если вы можете определить, какая сущность вызывает это, посмотрите в вашей таблице entities и измените owner_guid на свой собственный, а затем вы сможете удалить сущность через Elgg.
Предупреждение
Прочтите раздел «Следует ли мне редактировать базу данных вручную?». Будьте очень осторожны при прямом редактировании базы данных. Это может сломать ваш сайт. Всегда делайте резервную копию перед этим.
Исправления
Плагин Database Validator проверит вашу базу данных на наличие этих причин и предоставит опцию для их исправления. Обязательно сделайте резервную копию базы данных перед тем, как попробовать опцию исправления.
Нет изображений
Если изображения профиля, изображения групп или другие файлы перестали работать на вашем сайте, это, вероятно, связано с неправильной конфигурацией, особенно если вы перешли на новый сервер.
Это наиболее распространённые ошибки конфигурации, которые приводят к тому, что изображения и другие файлы перестают работать.
Неверный путь к директории данных
Убедитесь, что путь к директории данных верен в области администрирования сайта. Он должен иметь завершающий слэш.
Неверные права доступа к директории данных
Проверьте права доступа к директории данных. Директория данных должна быть доступна для чтения и записи пользователю веб-сервера.
Мигрированная установка с новым расположением директории данных
Если вы мигрировали установку и вам нужно изменить путь к директории данных, обязательно обновите SQL для расположения filestore, как описано в инструкциях Дублирование установки.
Предупреждения об устаревании
Если вы видите много предупреждений об устаревании, которые говорят что-то вроде
Deprecated in 1.7: extend_view() was deprecated by elgg_extend_view()!
значит, вы используете плагин, написанный для более старой версии Elgg. Это означает, что плагин использует функции, которые запланированы к удалению в будущей версии Elgg. Вы можете спросить разработчика плагина, будет ли он обновлён, или вы можете обновить плагин самостоятельно. Если ни одно из этих событий маловероятно, не следует использовать этот плагин.
JavaScript не работает
Если перестало работать всплывающее меню пользователя или вы не можете закрыть системные сообщения, это означает, что на вашем сайте не работает JavaScript. Обычно это происходит из-за плагина с ошибочным кодом JavaScript. Вам следует найти плагин, вызывающий проблему, и отключить его. Это можно сделать, отключая сторонние плагины по одному, пока проблема не исчезнет. Другой подход — отключить все сторонние плагины, а затем включать их по одному, пока проблема не появится снова.
Большинство веб-браузеров подскажут, что именно ломает код JavaScript. В них часто есть консоль для ошибок JavaScript или расширенный режим отображения ошибок. Как только вы увидите сообщение об ошибке, вам будет проще найти проблему.
Неверные IP-адреса в логах
Когда ваша установка Elgg находится за прокси-сервером или балансировщиком нагрузки, IP-адреса, записываемые в плагине System Log, могут быть неверными. Они могут показывать только IP-адреса прокси-сервера.
Чтобы решить эту проблему, вы можете настроить IP-адреса прокси-сервера как доверенные, что позволит системе получать корректные IP-адреса ваших пользователей.
В файле settings.php вы можете настроить параметры $CONFIG->http_request_trusted_proxy_ips и $CONFIG->http_request_trusted_proxy_headers. Дополнительную информацию см. в файле settings.php.
Безопасность
Является ли upgrade.php угрозой безопасности?
Upgrade.php — это файл для запуска обновлений кода и базы данных. Он находится в корне директории и не требует входа в систему для доступа. На полностью обновлённом сайте запуск этого файла лишь сбросит кэши и завершится, поэтому это не является угрозой безопасности.
Если вы всё ещё обеспокоены, вы можете удалить, переместить или изменить права доступа к файлу до тех пор, пока не потребуется обновление.
Следует ли удалить install.php?
Этот файл используется для установки Elgg и не требует удаления. Файл проверяет, установлен ли уже Elgg, и перенаправляет пользователя на главную страницу, если это так.
Фильтрация
Фильтрация в Elgg используется для усложнения XSS-атак. Цель фильтрации — удаление JavaScript и другого опасного ввода от пользователей.
Фильтрация выполняется через функцию elgg_sanitize_input(). Эта функция принимает строку и возвращает отфильтрованную строку. Она запускает событие sanitize, input event. По умолчанию Elgg поставляется с кодом фильтрации htmLawed в виде плагина. Разработчики могут добавить любой дополнительный или заменяющий код фильтрации в виде плагина.
Функция elgg_sanitize_input() вызывается для любого пользовательского ввода, если ввод получен через вызов get_input(). Если по какой-то причине разработчик не хочет применять фильтрацию по умолчанию к некоторому пользовательскому вводу, функция get_input() имеет параметр для отключения фильтрации.
Разработка
Что мне использовать для редактирования PHP-кода?
Есть два основных варианта: текстовый редактор или интегрированная среда разработки (IDE).
Текстовый редактор
Если вы новичок в разработке ПО или не имеете большого опыта работы с IDE, использование текстового редактора позволит вам быстрее начать работу. Как минимум, вам понадобится редактор с подсветкой синтаксиса для облегчения чтения кода. Если вы планируете отправлять патчи в баг-трекер, убедитесь, что ваш текстовый редактор не меняет окончания строк. Если вы используете Windows, хорошим выбором будет Notepad++. Если вы работаете на Mac, популярным выбором является TextWrangler. Также можно попробовать TextMate.
Интегрированная среда разработки
IDE делает именно то, что подразумевает её название: включает набор инструментов, которые обычно используются отдельно. Большинство IDE включают контроль исходного кода, что позволяет напрямую фиксировать и обновлять код из вашего cvs-репозитория. В них может быть встроен FTP-клиент для упрощения передачи файлов на удалённый сервер. В них есть проверка синтаксиса для выявления ошибок перед запуском кода на сервере.
Три самые популярные бесплатные IDE для разработчиков PHP — это Eclipse, NetBeans и Codelobster. Eclipse имеет два разных плагина для работы с кодом PHP: PDT и PHPEclipse.
Мне не нравится формулировка чего-то в Elgg. Как мне это изменить?
Лучший способ сделать это — с помощью плагина.
Создать скелет плагина
Найдите строку, которую вы хотите изменить
Все строки, которые видит пользователь, должны находиться в директории /languages или в директории языков плагина (/mod/<имя плагина>/languages). Это сделано для того, чтобы было легко изменить язык, используемый Elgg. Дополнительную информацию см. в документации для разработчиков: Интернационализация.
Чтобы найти строку, используйте grep или текстовый редактор с функцией поиска по файлам. (Хороший текстовый редактор для Windows — Notepad++) Допустим, мы хотим изменить строку «Add friend» на «Make a new friend». Команда grep для поиска этой строки будет grep -r "Add friend" *. Используя Notepad++, вы воспользуетесь командой «Найти в файлах». Вы будете искать строку, установите фильтр *.php, укажете базовую директорию Elgg и убедитесь, что поиск выполняется во всех поддиректориях. Также можно установить чувствительность к регистру.
Вы должны найти строку «Add friend» в файле /languages/en.php. В файле вы увидите что-то подобное:
'friend:add' => "Add friend",
Это означает, что каждый раз, когда Elgg видит friend:add, он заменяет это на «Add friend». Мы хотим изменить определение friend:add.
Переопределите строку
Чтобы переопределить это определение, мы добавим языковой файл в плагин, созданный на первом шаге.
Создайте новую директорию:
/mod/<имя вашего плагина>/languagesСоздайте в этой директории файл с именем
en.phpДобавьте в этот файл следующие строки
<?php
return array(
'friend:add' => 'Make a new friend',
);
Убедитесь, что перед <?php нет пробелов или переносов строк.
Теперь вы закончили и должны иметь возможность включить плагин и увидеть изменения. Если вы переопределяете язык плагина, убедитесь, что ваш плагин загружается после того, который вы пытаетесь изменить. Порядок загрузки определяется на странице управления инструментами в разделе администрирования. По мере нахождения других элементов, которые вы хотите изменить, вы можете продолжать добавлять их в этот плагин.
Как мне найти код, который делает x?
Лучший способ найти код, который делает что-то, что вы хотите изменить, — использовать grep или аналогичный инструмент поиска. Если в вашей операционной системе нет grep, установите инструмент grep или используйте текстовый редактор/IDE с хорошим поиском по файлам. Notepad++ — хороший выбор для пользователей Windows. Eclipse с PHP и NetBeans — хорошие варианты для любой платформы.
Пример строки
Допустим, вы хотите найти, где расположен код окна Входа. Строка из окна Входа, которая должна быть достаточно уникальной, — это Remember me. Выполните grep по этой строке. Вы обнаружите, что она используется только в файле en.php в директории /languages. Там она используется для определения строки Интернационализация user:persistent. Теперь выполните grep по этой строке. Вы найдёте её в двух местах: в том же языковом файле en.php и в /views/default/forms/login.php. Последний определяет HTML-код, из которого состоит окно Входа.
Пример действия
Допустим, вы хотите найти код, который выполняется, когда пользователь нажимает кнопку Сохранить при размещении виджетов на странице профиля. Откройте страницу профиля тестового пользователя. Используйте Firebug для детального изучения HTML-кода страницы, пока не дойдёте до действия формы редактирования виджетов. Вы увидите, что URL от базового адреса — action/widgets/move.
Выполните grep по widgets/move, и будут возвращены два файла. Один — это код JavaScript для виджетов: /js/lib/ui.widgets.js. Другой, /engine/lib/widgets.php, — это место, где действие регистрируется с помощью elgg_register_action('widgets/reorder'). Если вы не знакомы с этой функцией, найдите её в справочнике API. Выполните поиск по функции, и она вернёт документацию по функции. Это подскажет вам, что действие находится в расположении по умолчанию, так как расположение файла не было указано. Расположение по умолчанию для действий — /actions, поэтому вы найдёте файл по адресу /actions/widgets/move.php.
Режим отладки
В процессе установки вы, возможно, заметили флажок, управляющий включением или выключением режима отладки. Этот параметр также можно изменить на странице администрирования сайта. Режим отладки записывает много дополнительных данных в ваш PHP-лог. Например, при работе в этом режиме каждый запрос к базе данных записывается в ваши логи. Это может быть полезно для отладки проблемы, хотя может создавать огромный объём данных, которые могут вообще не относиться к проблеме. Вы можете поэкспериментировать с этим режимом, чтобы понять, как он работает, но убедитесь, что запускаете Elgg в обычном режиме на рабочем сервере.
Предупреждение
Из-за объёма записываемых данных не включайте это на рабочем сервере, так как это может очень быстро заполнить файлы логов.
Что попадает в лог в режиме отладки?
Все запросы к базе данных
Профилирование запросов к базе данных
Время генерации страницы
Количество запросов на страницу
Список языковых файлов плагинов
Дополнительные ошибки/предупреждения по сравнению с обычным режимом (очень редко такие типы ошибок связаны с проблемами, которые могут у вас возникать)
Как выглядят данные?
[07-Mar-2009 14:27:20] Query cache invalidated
[07-Mar-2009 14:27:20] ** GUID:1 loaded from DB
[07-Mar-2009 14:27:20] SELECT * from elggentities where guid=1 and ( (1 = 1) and enabled='yes') results cached
[07-Mar-2009 14:27:20] SELECT guid from elggsites_entity where guid = 1 results cached
[07-Mar-2009 14:27:20] Query cache invalidated
[07-Mar-2009 14:27:20] ** GUID:1 loaded from DB
[07-Mar-2009 14:27:20] SELECT * from elggentities where guid=1 and ( (1 = 1) and enabled='yes') results cached
[07-Mar-2009 14:27:20] ** GUID:1 loaded from DB
[07-Mar-2009 14:27:20] SELECT * from elggentities where guid=1 and ( (1 = 1) and enabled='yes') results returned from cache
[07-Mar-2009 14:27:20] ** Sub part of GUID:1 loaded from DB
[07-Mar-2009 14:27:20] SELECT * from elggsites_entity where guid=1 results cached
[07-Mar-2009 14:27:20] Query cache invalidated
[07-Mar-2009 14:27:20] DEBUG: 2009-03-07 14:27:20 (MST): "Undefined index: user" in file /var/www/elgg/engine/lib/elgglib.php (line 62)
[07-Mar-2009 14:27:20] DEBUG: 2009-03-07 14:27:20 (MST): "Undefined index: pass" in file /var/www/elgg/engine/lib/elgglib.php (line 62)
[07-Mar-2009 14:27:20] ***************** DB PROFILING ********************
[07-Mar-2009 14:27:20] 1 times: 'SELECT * from elggentities where guid=1 and ( (access_id in (2) or (owner_guid = -1) or (access_id = 0 and owner_guid = -1)) and enabled='yes')'
...
[07-Mar-2009 14:27:20] 2 times: 'update elggmetadata set access_id = 2 where entity_guid = 1'
[07-Mar-2009 14:27:20] 1 times: 'UPDATE elggentities set owner_guid='0', access_id='2', container_guid='0', time_updated='1236461868' WHERE guid=1'
[07-Mar-2009 14:27:20] 1 times: 'SELECT guid from elggsites_entity where guid = 1'
[07-Mar-2009 14:27:20] 1 times: 'UPDATE elggsites_entity set name='3124/944', description='', url='http://example.org/' where guid=1'
[07-Mar-2009 14:27:20] 1 times: 'UPDATE elggusers_entity set prev_last_action = last_action, last_action = 1236461868 where guid = 2'
[07-Mar-2009 14:27:20] DB Queries for this page: 56
[07-Mar-2009 14:27:20] ***************************************************
[07-Mar-2009 14:27:20] Page /action/admin/site/update_basic generated in 0.36997294426 seconds
Какие события запускаются при каждой загрузке страницы?
Существует 4 события Elgg, которые запускаются при каждой загрузке страницы:
plugins_boot, system
init, system
ready, system
shutdown, system
Первые три запускаются в Elgg\Application::bootCore. shutdown, system запускается в \Elgg\Application\ShutdownHandler после отправки ответа клиенту. Все они задокументированы.
Существуют и другие события, которые Elgg запускает периодически (например, при входе пользователя).
Копирование плагина
Часто задаются вопросы о том, как скопировать плагин. Допустим, вы хотите скопировать плагин blog, чтобы запустить один плагин под названием blog, а другой — poetry. Это несложно, но требует значительной работы. Вам потребуется:
изменить имя каталога
изменить имена всех функций (наличие двух функций с одинаковым именем приводит к сбою PHP)
изменить имя каждого представления (чтобы не переопределять представления оригинального плагина)
изменить любые подтипы модели данных
изменить языковой файл
изменить всё остальное, что было специфично для оригинального плагина
Примечание
Если вы пытаетесь клонировать плагин groups, у вас возникнет дополнительная сложность: плагин групп не устанавливает подтип.