Наследование шаблонов в PHP без использования сторонних библиотек. Получаем параметр action

Многих интересует вопрос, как перенести сайт и БД на новый хостинг или с тестовой локальной машины на рабочий сервер? Внимательно читаем инструкцию.

Для переноса сайта с одного хостинга на другой, или с тестовой локальной машины на рабочий сервер выполните следующие действия:
1. Копируем содержимое всех файлов XOOPS, включая xoops_lib и xoops_data. Лучше архивировать прямо на сервере (локальной машине), легче будет скачать/заливать;
2. Создаём дамп базы данных на старом/локальном сервере;
2.1. Заходим в phpMyAdmin и выбираем нужную базу данных;
2.2. Нажимаем на вкладку "Экспорт" [рис. 1]

Рис. 1

2.3. Выбираем способ экспорта "Быстрый - отображать минимум настроек" нажимаем ok и скачиваем дамп [рис. 2]. В старых версиях нужно указать "Сохранить как файл".

Рис. 2

3. Создаём на новом сервере базу данных для сайта. При создании указываем кодировку utf8. [рис. 3]

Рис. 3

Замечане: Мы привели пример создания базы данных через phpMyAdmin, для этого у вас должны быть привелегии на создание баз данных. Более подробно об создании баз данных читайте в инструкциях к Вашему хостингу.

3.1. Заходим в созданную базу данных и выбираем вкладку "Операции". Здесь мы должны указать кодировку сравнения [рис. 4 ]. Этот шаг можно пропустить, если вы указали кодировку при создании базы данных.

Рис. 4

4. Импортируем созданный на втором шаге дамп базы данных на новый хостиг.
4.1. Заходим в phpMyAdmin и выбираем созданную базу данных.
4.2. Переходим во вкладку "Импорт", выбираем дамп базы данных с локального компьютера, кодировка файла utf-8, и нажимаем ok. [рис. 5]

Рис. 5

5. Закачиваем на новый сервер архив с файлами XOOPS и распаковываем его.
6. Следующим дирректириям устанавливаем права на запись (UNIX 777):
uploads/
uploads/avatars/
uploads/images/
uploads/ranks/
uploads/smilies/
xoops_lib/modules/protector/configs/
xoops_data/caches
xoops_data/caches/xoops_cache
xoops_data/caches/smarty_cache
xoops_data/caches/smarty_compile
xoops_data/configs
xoops_data/data
7. Редактируем конфигурационные файлы;
7.1. Открываем файл /mainfile.php и редактируем следующие строки:
7.1.1. Полный путь до папки XOOPS на новом сервере: define("XOOPS_ROOT_PATH", "C:/xampp/htdocs/xoops");
7.1.2. Полный путь до папки xoops_lib на новом сервере (из соображений безопасности её необходимо вынести в не корня сайта): define("XOOPS_PATH", "C:/xampp/htdocs/xoops/xoops_lib");
7.1.3. Полный путь до папки xoops_data на новом сервере (из соображений безопасности её необходимо вынести в не корня сайта): define("XOOPS_VAR_PATH", "C:/xampp/htdocs/xoops/xoops_data");
7.1.4. HTTP адрес сайта: define("XOOPS_URL", "http://сайт");
7.2. Открываем файл /xoops_data/data/secure.php и редактируем следующие строки:
7.2.1. Хост сервера базы данных (оточняйте у хостинг провайдера): define("XOOPS_DB_HOST", "localhost");
7.2.2. Пользователь созданной базы данных: define("XOOPS_DB_USER", "xoops_user");
7.2.3. Пароль созданной базы данных: define("XOOPS_DB_PASS", "xoops_pass");
7.2.4. Имя созданной базы данных: define("XOOPS_DB_NAME", "xoops_2.5.5_new");
8. На файлы /mainfile.php и /xoops_data/data/secure.php ставьте права только для чтения (UNIX 444)
9. Открываем сайт в браузере, в нашем случае это

Начиная с третьей версии wordpress предоставляет в наше распоряжение такой любопытный инструмент как произвольные типы записей (они же пользовательские, они же таксономии). Да, автор в курсе, что об этом написано уже немало строк в том числе и на русском языке, однако, столкнувшись с таксономиями в реальности, не всегда можно найти подробные примеры их использования (конечно, не считая скудного описания на официальном сайте wordpress). А посему… ну, как обычно, пишу, чтобы не забыть, ибо старые проекты, содержащие весь код, сохраняю редко.

Как создать?

Вообще, (вы удивитесь) wordpress уже содержит несколько примеров типов записей. Таковыми являются:

  • пост (post -> single.php)
  • страница (page -> page.php)
  • вложения они же медиафайлы (attachments)
  • редакции (revisions)
  • элементы меню (nav_menu_item)

Когда вы создаёте свой тип записи, он, как правило, базируется на каком-то уже существующем и наследует поведение встроенного типа. В примере создадим новый тип записи «Новости», взяв за основу обычный пост.

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

/* ** Custom types ** Icons for Type: ** https://developer.wordpress.org/resource/dashicons/ */ // News function create_news () { register_post_type ("news" , array ( "labels" => array ( "name" => __ ( "News" ), "singular_name" => __ ( "News" ), "add_new" => __ ( "Add news" ), "add_new_item" => __ ( "Add news item" ), "edit" => __ ( "Edit news" ), "edit_item" => __ ( "Edit news item" ), "new_item" => __ ( "Single news" ), "all_items" => __ ( "All news" ), "view" => __ ( "View news" ), "view_item" => __ ( "View single news" ), "search_items" => __ ( "Search news" ), "not_found" => __ ( "News not found" ), ), "public" => true , // show in admin panel? "menu_position" => 5 , "supports" => array ( "title" , "editor" , "thumbnail" , "excerpt" , "custom-fields" ), "taxonomies" => array ( "" ), "has_archive" => true , "capability_type" => "post" , "menu_icon" => "dashicons-admin-site" , "rewrite" => array ("slug" => "news" ), )); } add_action ( "init" , "create_news" );

Что сделали? Зарегистрировали новый тип записи с именем news. В массиве он принимает возможные значения, определяющие то, как будут выводиться названия тех или иных действий при редактировании новостей в административной панели. При этом использовали названия, учитывающие локализацию. Если вы делаете шаблон, не предназначенный для «мультиязычной» аудитории, можно ограничиться наименованиями на русском.

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

Пункт taxonomies предназначен для связывания типа записи с произвольной же таксономией. Но это не является темой данной заметки и будет обсуждаться в будующих пцбликациях.

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

Ну, и наконец пути к нашим новостям будут иметь адрес вида mydomain.com/news/my-first-news . Отлично. Инициализируем новый тип записи при помощи add_action и топаем в админку: обновлять роутинг (сохранить изменения), иначе wordpress не сможет найти страницы с news .

Кстати, google требует, чтобы новости оканчивались не красивым названием, а ID. Поэтому иногда нужно знать как переопределить стандартные пути к ним. Сделать это можно в functions.php вот таким хитрым образом:

/* Change links for news post type */ function news_permalink ($permalink , $post = 0 ){ if ( $post -> post_type == "news" ){ return $permalink . $post -> ID . "/" ; } else { return $permalink ; } } add_filter ("post_type_link" , "news_permalink" , 1 , 3 ); function news_rewrite_init (){ add_rewrite_rule ( "news/.+?/(+)?$" , "index.php?post_type=news&p=$matches" , "top" ); } add_action ( "init" , "news_rewrite_init" );

Как добавить дополнительную информацию?

Иногда помимо добавления самого типа записи требуется расширить его представление в административной панели. К примеру, надо вывести информацию об оригинальном источнике новости. В таком случае придётся обратиться к неким мистическим сущностям wordpress, название которых слабо переводится на русский, (и потому нет желания его коверкать, придумывая неологизмы) это metaboxes.

Что всё это значит:

  • links_meta -> идентификатор
  • Source -> название блока
  • links_meta_callback -> обратный вызов
  • news -> к какому типу записи применить
  • advanced/normal -> в каком месте вывести
  • default/height -> приоритет в контексте других блоков

Какие поля будет включать блок? Обратимся к функции обратного вызова.

Original news link:

" ); wp_nonce_field ( basename (__FILE__ ), "links_nonce" ); $links_stored_meta = get_post_meta ( $post -> ID ); ?>


" />

Проиллюстрируем сказанное:

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

/** * Saves the custom meta input */ function links_meta_save ( $post_id ) { // Checks save status $is_autosave = wp_is_post_autosave ( $post_id ); $is_revision = wp_is_post_revision ( $post_id ); $is_valid_nonce = ( isset ( $_POST [ "links_nonce" ] ) && wp_verify_nonce ( $_POST [ "links_nonce" ], basename ( __FILE__ ) ) ) ? "true" : "false" ; // Exits script depending on save status if ( $is_autosave || $is_revision || ! $is_valid_nonce ) { return ; } // Checks for input and sanitizes/saves if needed if ( isset ( $_POST [ "links-news-original" ] ) ) { update_post_meta ( $post_id , "links-news-original" , sanitize_text_field ( $_POST [ "links-news-original" ] ) ); } } add_action ( "save_post" , "links_meta_save" );

Как вывести на странице?

Есть два варианта: сделать шаблон по правилам wordpress или же вывести на странице с шаблоном собственным.

Для шаблона, который будет выводить каждую отдельную запись, создадим страницу с именем single-news.php и примерно таким содержанием:

// Retrieves the stored value from the database $meta_url = get_post_meta ( get_the_ID (), "links-news-original" , true ); ?>

Может так случиться, что для особого типа записи надо будет выводить свой шаблон. Зачем? А там другое оформление или даже разметка. Тогда записываем ещё одну вещь: проверим тип записи, и если он совпадает с нужным, пусть движок использует страницу, отличную от стандартной. Сделаем это для страницы архива, которая не воспринимает указание шаблона а-ля archive-news .

is_search && $post_type == "news" ) { return locate_template ("archive-news" ); } return $template ; } add_filter ("template_include" , "template_news" );

Записи в таком шаблоне выводятся как обычно, без дополнительных запросов с wp_query.

Каждую страницу которая заканчивается на / можно открыть и через /index.php. Думаю, каждый более-менее уважаемый вебмастер это знает и вдаваться в подробности не стоит. Мы думаем, что это не сильная проблема как для людей, так и для поисковых роботов. Но все же, что-бы было на 100% правильно, давайте сделаем так, что если страница открывается через слэш, то ее нельзя было открыть через /index.php или /index.html. Естественно, везде должен отадаваться 301 редирект. чтобы ранее проставленные ссылки не теряли свой вес.


Результат работы скрипта

Как забирать окончание /index.php в Битриксе

Битрикс самая популярная коммерческая CMS, да и мы ее используем, поэтому давайте рассмотрим пример на ней. Многие вебмастера пытаются решить подобную задачу через php, записав код в init.php. но тут возникает 2 ошибки:

  • Редирект не будет работать при композите, потому что композит не грузит ядро битрикса;
  • Большая нагрузка на сервер, т.к. запускается Apache для редиректа.

Вообщем, правильно делать такой редирект исключительно через.htaccess файл. Откроем файл.htaccess, который лежит в корне битрикса и просто добавим 2 строчки кода. RewriteBase / нужно дописать после RewriteEngine On, а в конец всех правил добавим RewriteRule ^(.*)index\.php$ $1 . Естественно, все в конструкции должно лежать. Код:

Options +FollowSymLinks RewriteEngine On #Добавил RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-l RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$ RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L] RewriteRule .* - #Добавил RewriteRule ^(.*)index\.php$ $1

Забирать окончание /index.php через.htaccess

Если у вас не битрикс, то в корне сайта в.htaccess файле (если его нет, то создайте) нужно добавить такой код:

RewriteEngine On RewriteBase / RewriteRule ^(.*)index\.php$ $1

Надеюсь вы решили вашу задачу!

Hair loss medication, Propecia (finasteride) may be linked to a side effect of sexual dysfunction, a problem which may not go away after treatment has stopped , researchers from George Washington University reported in the Journal of Sexual Medicine . Propecia is a popular medication taken for male pattern hair loss .

Michael S. Irwig MD, who works at the Center for Andrology and Division of Endocrinology, The George Washington University, Washington, DC, prospectively monitored 54 adult males, average age 31, who had had three or more months of finasteride-associated sexual side effects. A side effect that continues for over three months is described as "persistent".

All the men were healthy at the start of the study, and had never had any problems with sexual functions; they had no medical or psychiatric conditions and had not used oral prescription drugs before taking Propecia for male pattern hair loss.

All the men in this study were checked and rechecked for 14 months.

96% of those who were reassessed still had persistent sexual side effects; some of them also had changes in cognition, genital sensation, and ejaculate quality.

Dr. Irwig found that 89% of the 54 men met the Arizona Sexual Experiences Scale (ASEX) of sexual dysfunction, which rates sex drive (libido), arousal, penile erection, ability to orgasm, and orgasm satisfaction.

In an Abstract in the same journal, Dr. Irwig concluded:

"In most men who developed persistent sexual side effects (≥3 months) despite the discontinuation of finasteride, the sexual dysfunction continued for many months or years.

Although several rat studies have shown detrimental changes to erectile function caused by 5 alpha reductase inhibitors, the persistent nature of these changes is an area of active research.

Prescribers of finasteride and men contemplating its use should be made aware of the potential adverse medication effects."


What is Propecia (finasteride)?

Finasteride is a synthetic 5α-reductase inhibitor. It is an inhibitor of the enzyme that coverts testosterone to DHT (dihydrotestosterone). It is produced and marketed by Merck & Co., Inc. It is known under the brand names Proscar and Propecia and has been approved by the FDA for the treatment of:
  • Male pattern baldness - hair is lost in a well defined pattern, starting above the temples and thinning at the crown of the head.

  • Benign prostatic hyperplasia - an increase in the size of the prostate
Reported side effected related to finasteride include:
  • Erectile dysfunction (impotence)
  • Abnormal ejaculation
  • Lower ejaculatory volume
  • Abnormal sexual function
  • Testicular pain
  • Gynecomastia - development of male breasts
  • Depression - Merck added this side effect in December 2010
Prostate cancer - The FDA added a warning that finasteride may raise the risk of high-grade prostate cancer . No clear link has been established between finasteride use and prostate cancer risk. Some studies have suggested it may reduce the prevalence and growth of benign prostate tumors. However, finasteride can also mask the early detection of prostate cancer.

A 2008 study found that finasteride reduces prostate cancer risk without boosting the chances of developing aggressive tumors. ()

Аннотация : В статье рассматриваются вопросы, связанные с проведением в сентябре 2014 г. референдума о независимости Шотландии. Автор освещает основные этапы деволюционного движения в Шотландии с тем, чтобы выявить предпосылки происходящих сейчас событий. Затем исследуется отношение населения региона к идеям независимости, для того чтобы попытаться спрогнозировать исход предстоящего референдума. В целях прогнозирования и понимания будущих процессов в регионе, автор представляет основные плюсы и минусы более радикального варианта развития событий - отделения Шотландии от Великобритании. В статье использованы, как теоретические методы - анализ и синтез, так и исторический (рассмотрение процессов деволюции в исторической ретроспективе), а так же практические: мониторинг и прогнозирование (попытка предсказать исход референдума с помощью наличия определенных количественных данных). Анализ возможных последствий отделения региона показал, что независимость приведет к множеству как положительных, так и негативных моментов в политической и социально-экономической сферах жизни шотландского общества. Изучив отношение населения к идеям независимости региона за последние 35 лет, автор заключает, что Шотландия останется в составе Великобритании, но с предоставлением ее институтам власти еще больших полномочий в будущем.

Ключевые слова : независимость, референдум, деволюция, отношение к независимости, плюсы отделения Шотландии, минусы отделения Шотландии, политические аспекты, социально-экономические аспекты, Шотландская Национальная партия, этнический сепаратизм

DOI : 10.7256/1812-8696.2014.7.12577

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

Библиография:
Еремина Н. В. Проблема развития региональных инноваций: фактор культурно-исторического наследия в отношениях «центр-периферия» (на примере национальных регионов Великобритании) // Политика как фактор инновационного развития. Материалы международной научной конференции / Под ред. А.Ю. Сунгурова. СПб., 2010.
Еремина Н. В. Проблема статуса Шотландии в 90-е гг. XX в. Спб.: Изд-во С.-Петерб. Ун-та, 2005.
Кагриманян А. С. Экономические факторы периферийного сепаратизма в Европе // Федерализм. – 2014.-№ 1 (73).
Curtis J., Steven M. The 2011 Scottish parliament election. The electoral reform society. London, 2011.
Keating M. The Government of Scotland: Public Policy Making After Devolution. Edinburgh, 2010.
Kellas J. G. The Scottish political system. New York, 1973.
McLean I., Gallagher J., Lodge G. Scotland"s Choices: The Referendum and what Happens Afterwards. Edinburgh, 2013.
Philips D. Government spending on benefits and state pensions in Scotland: current patterns and future issues. Institute for fiscal studies. London, 2013.
Pilkington C. Devolution in Britain today. Manchester, 2002.
Smith K. Beyond Evidence Based Policy in Public Health: The Interplay of Ideas. Basingstoke.: Palgrave Macmillan, 2013.

Правильная ссылка на статью:
просто выделите текст ссылки и скопируйте в буфер обмена
Кагриманян А.С. Независимость Шотландии: быть или не быть. // Политика и Общество. - 2014. - № 7. - C. 745-752. DOI: 10.7256/1812-8696.2014.7.12577



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: