Drupal → Функции для работы с файловыми путями. Drupal структура папок
Структура папок для нескольких сайтов Drupal Drupal Ask
Чтобы продлить ответ @ Pierre.Vriens, вы можете добавить правило перезаписи, чтобы сделать URL-адреса более приятными
допущения
- у вас созданы общедоступные файлы
- у вас есть нормализация URL (либо символические ссылки в каталоге файлов, либо 301) RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /sites/%{HTTP_HOST}/files/$1 [L]
в вашем хосте
http://www.example.com/filename.pdfи переписать его на
http://www.example.com/sites/www.example.com/files/filename.pdfчто я имею в виду по нормализации URL? ну, если вы можете получить example.com – тогда вы получите 404 – так как папка в каталоге сайтов – http://www.example.com
простым решением является использование символических ссылок в каталоге сайтов или использование 301 переадресации
использовать символические ссылки, предположим, что у вас есть
sites/www.example.comвы могли бы создать символическую ссылку на него следующим образом
ln -s www.example.com example.comэто создаст символическую ссылку из
sites/example.comв папку http://www.example.com. это означает, что и http://www.example.com, и example.com будут найдены, когда выполняется правило перезаписи
Не создавайте такую папку в корневой папке Drupal. Но вместо этого создайте подпапку xxx в обоих этих поддиректорах:
- sites/mydomain (при условии, что mydomain – это то, что соответствует вашим www.mydomain.com ).
- sites/anotherdomain (при условии, что anotherdomain – это то, что соответствует вашим sites/anotherdomain www.anotherdomain.com ).
Таким образом, 2 папки sites/mydomain/xxx и sites/anotherdomain/xxx наверняка не будут разделены между этими двумя сайтами в рамках многосайтовой конструкции.
drupal.wordpressask.com
Расположение файлов - CMS Drupal 7 РУКОВОДСТВО ПО РАЗРАБОТКЕ СИСТЕМЫ УПРАВЛЕНИЯ ВЕБ-САЙТОМ
Знание структуры каталогов, создаваемой при стандартной установке Drupal, позволит усвоить несколько важных правил. В частности, вы будете знать, где должны размещаться загруженные модули и темы и как использовать различные профили инсталляции Drupal. Стандартная структура каталогов Drupal показана на рис. 1.4.
Ниже приведены пояснения относительно каждого элемента этой структуры.
- Папка includes содержит библиотеки общих функций, которые использует Drupal.
- Папка misc хранит сценарии JavaScript и различные пиктограммы и изображения, входящие в дистрибутив Drupal.
- Папка modules содержит модули ядра, причем каждый модуль хранится в отдельной папке. Лучше ничего не изменять в этой папке (и в любой другой, кроме profiles и sites). Дополнительные модули должны добавляться в каталог sites.
- Папка profiles содержит различные профили инсталляции для сайта. Если в этом подкаталоге имеются другие профили, помимо профиля по умолчанию, при первоначальной установке сайта Drupal будет появляться вопрос, какой именно профиль вы хотите использовать. Основное назначение профиля инсталляции — автоматическое включение доступа к определенным модулям ядра и сторонним модулям. Примером может служить профиль электронной торговли, который автоматически настраивает Drupal как платформу для Интернет-магазина.
- Папка scripts содержит сценарии, используемые для проверки синтаксиса, очистки кода, запуска Drupal из командной строки, обработки особых случаев с помощью cron и запуска тестовых наборов (только в Drupal 7). Они не применяются при выполнении запросов к Drupal, а являются командными сценариями, написанными на языке командной оболочки и Perl.
- Каталог sites (рис. 1.5) содержит изменения в Drupal в виде параметров, модулей и тем. При добавлении в Drupal модулей из хранилища дополнительных модулей или в случае создания собственного модуля они помещаются в подкаталог sites/all/modules. Благодаря этому все модификации Drupal хранятся в единственной папке. В каталоге sites должен быть подкаталог с именем default, содержащий файл стандартной конфигурации сайта Drupal — default.settings.php. Инсталлятор Drupal модифицирует эти исходные параметры на основе предоставленной вами информации и запишет файл settings.php для вашего сайта. Обычно стандартный каталог копируется и переименовывается в соответствии с URL сайта лицом, выполняющим развертывание сайта, поэтому ваш файл настроек может иметь имя вроде sites/www.example.com/settings.php.
- Папка sites/default/files создается при базовой инсталляции Drupal по умолчанию. Она необходима для хранения любых файлов, которые загружаются на сайт и впоследствии обслуживаются. Папка создается, например, при применении особого логотипа, разрешении использования посетителями “аватаров” или загрузке других медиафайлов, связанных с новым сайтом. Для этого подкаталога требуются права на чтение и запись со стороны сервера, на котором выполняется Drupal. Инсталлятор Drupal создаст (если сможет) этот подкаталог, и проверит, заданы ли необходимые права доступа. Кроме папки sites/default/files может быть создан каталог sites/default/private для хранения конфиденциальных файлов, которые не следует разрешать просматривать посетителям сайта без надлежащих полномочий. Для создания этого каталога нужно выбрать пункт меню () и ввести в текстовом поле Private file system path (Путь в приватной файловой системе) имя каталога, где должны храниться конфиденциальные файлы.
- Папка themes содержит механизмы шаблонов и стандартные темы для Drupal. Дополнительные темы — загруженные или созданные самостоятельно — не должны попадать сюда; они помещаются в каталог sites/all/themes.
- cron.php используется для выполнения регулярных задач, таких как сжатие таблиц баз данных и сбор статистики.
- index.php — главная точка входа для обслуживания запросов.
- install.php — главная точка входа для инсталлятора Drupal.
- update.php обновляет схему базы данных после модернизации до новой версии Drupal.
- xmlrpc.php принимает запросы XML-RPC и может быть безопасно удален из развертываний, где не нужно принимать такие запросы.
- robots.txt — реализация по умолчанию стандарта исключения роботов.
- authorize.php — административный сценарий для выполнения авторизованных операций обработки файлов — например, загрузки и установки новой темы или модуля с сайта Drupal.org.
Другие файлы, которые здесь не перечислены — это файлы документации.
books-cms.clan.su
Расположение файлов в Drupal 7
После установки Drupal на ваш сервер вы можете наблюдать в корневом каталоге большое количество папок и файлов, назначение которых многие веб-мастера не знаю, хотя должны бы знать. Сегодня, я попытаюсь в кратце объяснить назначение папок и некоторых файлов.
- Папка includes – содержит библиотеки общих функций, которые использует Drupal.
- Папка misk – содержит JS сценарии, различные изображения и пиктограммы, которые входя в базовый пакет Drupal.
- Папка modules – содержит модули «ядра» Drupal. Напомню вам, что в этой папке хранятся лишь модули, которые идут из базового пакета Drupal, все устанавливаемые дополнительные модули вы должны хранить в папке modules по пути sites/all/
- Папка profiles – содержит различные профили установки. В базовом пакете Drupal присутствует стандартный и минимальный профиль установки, вы можете это наблюдать при установке Drupal. Вы можете самостоятельно создавать свои установочные профили, его основное назначение - это доступ к определённым модулям ядра и дополнительным модулям. Например свой установочный профиль имеет Kickstart.
- Папка scripts – содержит сценарии, которые используются для проверки синтаксиса, очистки кода, запуска Drupal из командной строки, запуска тестовых наборов. Не применяются при выполнения запроса к Drupal.
- Папка sites – содержит все изменения в Drupal, например дополнительные модули (папка modules), шаблоны (папка themes) и параметры (папка defaults). Внутри находится папка defaults, которая содержит файл settings.php – именно в нём хранятся все инсталяционные данные.
- Папка themes – содержит базовые шаблоны Drupal. Не рекомендуется хранить свои собственные шаблоны в данной папке. Напомню вам, что все ваши дополнительные шаблоны должны храниться в папке themes по пути sites/all/
- Файл cron.php – используется для выполнения регулярных задач, таких как сбор статистики или сжатие таблиц базы данных.
- Файл index.php – как и для большинства CMS, данный файл является главной точкой входа для инсталятора Drupal.
- Файл update.php – данный файл производит обновление схемы базы данных после обновления ядра Drupal. Необходимо запускать данный файл после каждого обновления ядра.
- Файл xmlrpc.php – данный файл принимает запросы XML-RPC.
- Файл robots.txt – базовая реализация стандарта исключения роботов.
- Файл authorize.php – административный сценарий, который позволяет загружать и устанавливать новые темы или модули с Drupal.org
- Файлы с расширением .txt – содержат документацию и копирайт на использование.
Если у вас есть, что дополнить - пишите в коментах, будем только рады!
drupalfly.ru
Drupal: создание темы Drupal 7
Общие принципыПрежде чем начинать создание темы Drupal 7 необходимо четко понимать внутренние механизмы и устройство системы темизации Drupal. Начнем разбираться с понимания файловой структуры устройства темы.
Тема Drupal 7 представляет собой структурированный набор файлов, на основании которых формируется пользовательское представление страницы. Так же существует возможность создавать под-темы (sub-themes) на базе существующих тем оформления без внесения существенных изменений в последние.
Общая структура файлов темы Drupal 7
Тема должна содержать как минимум один .info файл. Однако, в большинстве случаев, при создании самостоятельных тем или под-тем нужно использовать и другие файлы. Приведенная ниже диаграмма иллюстрирует перечень файлов, которые используются при создании темы Drupal 7.
Разберем назначение файлов.
.info (обязательный)
Начинать создание темы Drupal 7 следует с описания параметров в файле .info. В этом файле задаются основные параметры темы:
Внутренний идентификатор темы совпадает с именем этого файла. Например, если файл имеет имя “drop.info”, то Drupal будет идентифицировать тему оформления как “drop”. При именовании тем и файлов .info допускается использовать латинские буквы, цифры и знаки подчеркивания.
Файлы шаблонов используются для определения разметки отдельных HTML элементов страниц и PHP переменных, которые используются для вывода информации. В отдельных ситуациях файлы могут возвращать результаты и других типов, например xml rss.
Каждый файл шаблона .tpl.php обрабатывает и возвращает свой небольшой кусочек данных для отображения страницы или возврата ответа на запрос пользователя. В отдельных ситуациях может обрабатываться цепочка файлов шаблонов с использованием сокращений. Такие приемы необязательны, поэтому, если они не встречаются, то отображение темы будет происходить по стандартному сценарию.
При создании файлов шаблонов следует воздерживаться от использования сложных алгоритмов, которые могут привести к снижению производительности работы сервера. В большинстве случаев эти файлы содержат только HTML тэги и отдельные переменные PHP, которые используются для отображения шаблона.
Файлы шаблонов встречаются также в каталогах ядра и некоторых модулей Drupal. Копирование этих файлов в каталог темы заставит систему темизации Drupal использовать эти файлы из каталога темы, а не из исходного каталога. Таким образом, вы можете переопределить формат отображения отдельных элементов для модулей и ядра.
Примечание: В реестре тем кэшируется информация о текущих данных темы. Вам необходимо сбрасывать кэш каждый раз, когда вы добавляете или удаляете файлы шаблонов или функции темы.
template.php
Все функции, отвечающие за встроенную логику, обработку данных и управление отображением темы содержаться в файле template.php. Этот файл не является обязательным, однако размещение функций предварительной обработки данных в файл template.php позволяет создавать более элегантные и компактные, а главное производительные файлы шаблонов “.tpl.php”.
Пользовательские функции, которые переопределяют стандартные функции темы, а так же другие методы обработки данных для отображения страницы могут быть размещены в этом файле.
Файл template.php должен начинаться с открывающего PHP тэга “<?php”. Закрывающий тэг не нужен, и рекомендуется его не ставить.
Внешне под-темы ведут себя абсолютно так же, как и базовые темы оформления. Под-темы переопределяют только отдельные ресурсы и параметры родительских тем.
Для создания под-темы достаточно в ее .info файле указать идентификатор родительской темы оформления. Под-тема может использовать в качестве родительской темы другую под-тему. В Drupal не установлено жестких лимитов на наследование тем.
Другие ресурсы
Если вы хотите при создании темы использовать какую-либо стандартную тему, не вносите изменений в ее файлы. Сделайте собственную под-тему на основании выбранной. Внесение изменений в стандартную тему может привести к нежелательным последствиям при выполнении процедуры обновления программного обеспечения вашего сайта.
Любые пользовательские темы следует устанавливать в каталог “sites/all/themes” с целью отделить их от файлов ядра. Если вы планируете запустить несколько сайтов на одном ядре Drupal, можно сделать, чтоб тема была доступна только для определенного сайта. Подробнее можно прочитать в руководстве по многосайтовой установке.
Похожие записи
www.msav.ru
Drupal: Функции для работы с файловыми путями
drupal_basename($uri, $suffix = NULL) — возвращает имя файла. Это аналог PHP функции basename() за исключением того, что поддерживает stream wrappers и имена файлов с не US-ASCII символами.
drupal_basename('sites/default/files/test.jpg'); // test.jpg drupal_basename('public://test.jpg'); // test.jpg drupal_basename('/drupal/sites/default/files/test.jpg'); // test.jpg
drupal_dirname($uri) — возвращает директорию файла. Это аналог PHP функции dirname() за исключением того, что поддерживает stream wrappers.
drupal_dirname('sites/default/files/test.jpg'); // sites/default/files drupal_dirname('public://test.jpg'); // public:// drupal_dirname('/drupal/sites/default/files/test.jpg'); // /drupal/sites/default/files
drupal_realpath($uri) — возвращает абсолютный путь к файлу. Может работать с stream wrappers. Возвращает FALSE если файла не существует. Не рекомендуется к использованию.
drupal_realpath('sites/default/files/test.jpg'); // /drupal/sites/default/files/test.jpg drupal_realpath('public://test.jpg'); // /drupal/sites/default/files/test.jpg drupal_realpath('/drupal/sites/default/files/test.jpg'); // /drupal/sites/default/files/test.jpg
file_build_uri($path) — добавляет к пути файла дефолтный протокол (public://).
file_build_uri('test.jpg'); // public://test.jpg
file_create_filename($basename, $directory) — возвращает полный путь для будущего файла с именем $basename в директории $directory. Если файл с таким именем существует, то к имени файла добавляется порядковый номер. Поддерживает stream wrappers.
// если файл test.jpg не существует в указанной директории file_create_filename('test.jpg', 'sites/default/files'); // sites/default/files/test.jpg file_create_filename('test.jpg', 'public://'); // public://test.jpg file_create_filename('test.jpg', '/drupal/sites/default/files/'); // /drupal/sites/default/files/test.jpg // если файл test.jpg существует в указанной директории file_create_filename('test.jpg', 'sites/default/files'); // sites/default/files/test_0.jpg file_create_filename('test.jpg', 'public://'); // public://test_0.jpg file_create_filename('test.jpg', '/drupal/sites/default/files/'); // /drupal/sites/default/files/test_0.jpg
file_create_url($uri) — возвращает URL файла. Поддерживает stream wrappers. Не поддерживает абсолютные пути к файлу.
file_create_url('sites/default/files/test.jpg'); // http://example.com/sites/default/files/test.jpg file_create_url('public://test.jpg'); // http://example.com/sites/default/files/test.jpg file_create_url('/drupal/sites/default/files/test.jpg'); // /drupal/sites/default/files/test.jpg
file_destination($destination, $replace) — возвращает путь к существующему файлу в зависимости от значения $replace. Если файла $destination не существует, то функция возвратит то, что передано первым аргументом.
file_destination('sites/default/files/test.jpg', FILE_EXISTS_REPLACE)); // sites/default/files/test.jpg file_destination('sites/default/files/test.jpg', FILE_EXISTS_RENAME)); // sites/default/files/test_0.jpg file_destination('sites/default/files/test.jpg', FILE_EXISTS_ERROR)); // FALSE file_destination('public://test.jpg', FILE_EXISTS_REPLACE)); // public://test.jpg file_destination('public://test.jpg', FILE_EXISTS_RENAME)); // public://test_0.jpg file_destination('public://test.jpg', FILE_EXISTS_ERROR)); // FALSE file_destination('/drupal/sites/default/files/test.jpg', FILE_EXISTS_REPLACE)); // /drupal/sites/default/files/test.jpg file_destination('/drupal/sites/default/files/test.jpg', FILE_EXISTS_RENAME)); // /drupal/sites/default/files/test_0.jpg file_destination('/drupal/sites/default/files/test.jpg', FILE_EXISTS_ERROR)); // FALSE
file_directory_temp() — возвращает путь к временной директории, указанной на странице admin/config/media/file-system. Не рекомендуется использовать.
file_directory_temp(); // /tmp
file_munge_filename($filename, $extensions, $alerts = TRUE) — если файл имеет двойное расширение, например file.php.jpg, то функция добавит нижнее подчёркивание к первому расширению, во избежание взлома при криво настроенном апаче.
file_munge_filename('sites/default/files/exploit.php.pps', ''); // sites/default/files/exploit.php_.pps file_munge_filename('public://exploit.php.pps', ''); // public://exploit.php_.pps file_munge_filename('/drupal/sites/default/files/exploit.php.pps', ''); // drupal/sites/default/files/exploit.php_.pps
file_unmunge_filename($filename) — отменяет эффект от функции file_munge_filename().
file_unmunge_filename('sites/default/files/exploit.php_.pps'); // sites/default/files/exploit.php.pps file_unmunge_filename('public://exploit.php_.pps'); // public://exploit.php.pps file_unmunge_filename('/drupal/sites/default/files/exploit.php_.pps'); // drupal/sites/default/files/exploit.php.pps
file_stream_wrapper_uri_normalize($uri) — нормализует URI файла: удаляет завершающий слэш из имени директории и исправляет тройной слэш в протоколе.
file_stream_wrapper_uri_normalize('sites/all/files/'); // sites/all/files file_stream_wrapper_uri_normalize('public:///test.jpg'); // public://test.jpg
file_uri_scheme($uri) — возвращает протокол из URI.
file_uri_scheme('public://test.jpg'); // public file_uri_scheme('temporary://'); // temporary
file_uri_target($uri) — возвращает часть пути без протокола.
file_uri_target('public://test.jpg'); // test.jpg file_uri_target('temporary://test.jpg'); // test.jpg file_uri_target('sites/default/files/test.jpg'); // FALSE
file_valid_uri($uri) — возвращает TRUE если в $uri валидный Drupal URI.
file_valid_uri('public://test.jpg'); // TRUE file_valid_uri('foo://test.jpg'); // FALSE file_valid_uri('sites/default/files/test.jpg'); // FALSE Написанное актуально для Drupal 7 Похожие записиxandeadx.ru
Права на файлы и папки Drupal 7
Очень не плохой скрипт был дан в комментарии... https://www.drupal.org/node/244924#comment-6600078Изменил и доработал его под себя:
#!/bin/bash# Script made by Alex Belyj, [email protected] read -n 1 -p "Ну я начну разруливать права а Вы пока чайку попейте, хорошо? (y/[a]): " AMSURE [ "$AMSURE" = "y" ] || exitecho "" 1>&2echo "Начинаю изменение прав..."echo "Устанавливаю владельца www-data для всех папок и файлов"chown -R www-data:www-data './'echo "Выставляю права 755 для всех папок" find './' -type d -exec chmod 755 {} \;echo "Выставляю права 644 для всех файлов" find './' -type f -exec chmod 644 {} \;echo "Выставляю права 440 для .htaccess"chmod 440 './.htaccess'echo "Выставляю права 775 для sites"chmod 775 './sites'echo "Выставляю права 775 для sites/default"chmod 755 './sites/default'echo "Выставляю права 775 для sites/default/files"chmod 775 './sites/default/files'echo "Корректирую права g+w для поддеррикторий sites/default/files"chmod g+w -R './sites/default/files'echo "Выставляю права 440 для sites/default/files/.htaccess"chmod 440 './sites/default/files/.htaccess'echo "Выставляю права 440 для sites/default/settings.php"chmod 440 './sites/default/settings.php'echo "Выставляю права 440 для sites/default/default.settings.php"chmod 440 './sites/default/default.settings.php'echo "Выставляю права 775 для sites/all/themes"chmod 755 -R './sites/all/themes'echo "Выставляю права 775 для sites/all/modules"chmod 755 -R './sites/all/modules'echo "Выставляю права 775 для sites/all/libraries"chmod 755 -R './sites/all/libraries'echo "Изменение прав закончил! Убедись, что всё верно..."1. Скопируйте код скрипта и сохраните под названием "permissions.sh" в папке для локальных скриптов Bash. Соблюдайте кодировку UTF-8 (для нормального отображения кириллических символов в комментариях echo командной строки) и UNIX формат окончания строк (иначе получите /R в конце каждой строки):
nano /usr/local/bin/permissions.sh
2. Сделайте скрипт исполняемым:
chmod a+x /usr/local/bin/permissions.sh3. Перейдите в корень вашего сайта:
4. Выполните скрипт и согласитесь с началом выполнения:
PS: Если у вас "чистый" Drupal, то некоторые папки, например libraries или files, ещё могут быть не созданы. Так же если вы используете папку tmp вашей ОС, то в вашем Drupal её не будет. В этом случае выведется ошибка, что файла или папки не существует - это нормально. Рекомендую пользоваться скриптом на финальных этапах разработки или при переносе на хостинг, когда вся структура файлов и папок уже создана.PSS: Работа скрипта многократно проверена на Drupal 7 сайтах в ОС Debian 7 Wheezy.
UPD 2015.03.04: В скрипт вначале добавлена проверка на выполнение, при случайном запуске будет возможность отмены. Изменен алгоритм запуска скрипта. К сообщению прикреплён файл "permissions.zip" с вложенным скриптом.
drupal.ru