Как поменять страницу об отсутствии доступа к базе

Прислано: Shedko

вт, 12/09/2006 - 01:13



Вот появилась новая проблемка, как поменять страницу об отсутствии доступа к базе данных ?


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


Так можно ли поменять эту страничку, и как ?



Особенно хорошо было бы не менять ядро, если можно.

Спасибо.

Комментарии


Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Применить"
Опубликовано Shedko в вт, 12/09/2006 - 20:51.


Ну раз никто не отвечает пока, изложу свои соображения.

Как понял из коментариев в theme.inc, походу эту страницу нельзя поменять без редактирования файлов database.mysql.inc и database.mysqli.inc.

Т.к. когда эта страница выводится на экран, то сам Drupal не знает какая сейчас тема, да и логично, откуда ? Ведь база не доступна.


Вот блин....


Опубликовано B.X в вт, 12/09/2006 - 21:58.

хех... и это называется "отделение содержания от оформления"... что мешало проверять нужный файл в папке тем, например?


Опубликовано Shedko в вт, 12/09/2006 - 22:17.

Ну такое можно реализовать только для перехвата страницы "504 - Сайт находится на обслуживании" - но ведь тогда проблем с базой нет, но буду смотреть эту функцтю, а вдруг и здесь сработает. :-)


Опубликовано B.X в вт, 12/09/2006 - 22:58.

ну почему же? неужели при отсутствии коннекта к базе нельзя переадресовывать, например, на определённую страницу? я думаю можно, ничто не мешает эту страницу конфигурировать отдельно (чистый хтмл, например)...
ну а эту страницу (например noconnect.html) искать, скажем, в папке themes...


Опубликовано Shedko в вт, 12/09/2006 - 23:06.

Хотя действительно скорее всего посмотрю выдержки из database.mysql.inc и database.mysqli.inc, т.е. как там определяется что нет коннекта к базе, а потом этот кусок сделать отдельным файлом и первым подлючить в index.php сайта, а затем кж делать редирект на html страничку в папке с темой.


Осталось только это реализовать, но учитывая что с php не знаком буду действовать методом тыка :-), ну да ладно хотябы в голове сложилась логика что писать, а уж куски кода "повыдергивать" из файлов папки include смогу.


Опубликовано B.X в вт, 12/09/2006 - 23:23.

Да, это бы сделать, да ещё "сайт в оффлайне"... тогда бы вообще всё было нормально... а то непорядок, когда показывается что-то не темообразное...
если получится что-то рабочее сделать, то может напишете, что вы делали и как?


Опубликовано Shedko в вт, 12/09/2006 - 23:38.


Если насчет Сайт в оффлайне, то могу порекомендовать посмотреть тему meta, там эта страница настроенна, оттуда и себе стянул такую страничку :-)


Опубликовано B.X в вт, 12/09/2006 - 23:44.

да? интересно... не подскажете где конкретно в этой теме что смотреть? устанавливать из-за этой мелочи не хочется...


Опубликовано Shedko в ср, 13/09/2006 - 00:05.

Создаем в папке нашей темы подпапку "maintenance" ( просто мне так удобно, смотрите сами как хотите)


в корне скина создаем файл "maintenance_page.tpl.php"
вот его содержание, только надо заменить везде где встретится
themes/luna/maintenance/
на
themes/НАЗВАНИЕ НАШЕГО СКИНА/maintenance/
(знаю, есть функция для определения пути к скину, но лень было вспоминать, вот и прописал полный путь)

<?php echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 
<head>
<title></title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <link rel="Shortcut Icon" type="image/x-icon" href="favicon.ico" />
  <meta name="generator" content="Drupal" />  
  <base href="<?php global $base_url; print $base_url;?>" />
  <style type="text/css" media="all">@import "themes/luna/maintenance/maintenance.css";
</style>
  <!--[if IE 6]>
  <script type="text/javascript" src="themes/luna/maintenance/pngfix.js"></script>
  <![endif]-->
</head>
<body>
 
<div id="message-box">
	<?php if ($site_name != ""): ?>
    <h2><?php print $site_name ?><br />503 - Service Unavailable</h2>
    <?php else: ?>
    <h2>503 - Service Unavailable<br />Sorry For The Inconvenience</h2>
  <?php endif; ?>
	<div id="message"><?php print $content ?></div>
</div>
 
<div>
  <img src="themes/luna/maintenance/maintenance-drupalicon.png" width="359" height="460" 
alt="Shedko Software" id="drupal-logo" />
</div>
 
</body>
</html>

затем в папку maintenance ложим лого сайта с именем "maintenance-drupalicon.png", размер 359 на 460, это казано в предыдущем файле.
также сюда ложим рисунок для фона страницы, с именем "background-grey.gif", размеры 9 на 450 пкс.


создаем в этой же подпапке файл "maintenance.css", с содержанием

  /* $Id: maintenance.css,v 1.1.2.1 2006/02/12 04:11:52 kencollins Exp 
   P u t t i n g  t h i n g s  o n  t o p  o f  o t h e r  t h i n g s !  By: Ken Collins
+---------------------------------------------+
                                                                                                 */
 
 
* { list-style: none; margin: 0; padding: 0; }
img {  border: none; }
 
a { text-decoration: none; }
a, a:link, a:visited { border-bottom: 1px dotted #666; color: #f93; }
a:hover, a:active { color: #9c6; }
 
html, body { background: #fff url('background-grey.gif') repeat-x fixed top left }
 
body {
	font-family: Verdana, Arial, Helvetica, sans-serif;
	font-size: 62.6%;
	min-width: 420px;
	}
 
#message-box {
	left: 394px;
	position: absolute;
	top: 175px;
	z-index: 10;
	}
 
h2 {
	color: #9C0;
	font-family: "Arial Narrow", Arial, Helvetica, sans-serif;
	font-size: 2.4em;
	font-weight: normal;
	line-height: 1em;
	text-transform: uppercase;
	width: 16em;
	margin-bottom: 4px;
	}
 
#message {
	width: 32em;
	font-size: 120%;
	font-family: Verdana, "Lucida Grande", Geneva, Arial, Helvetica, "Bitstream Vera Sans", sans-serif;
	font-weight: normal;
	color: #333;
	letter-spacing: 0em;
	line-height: 1.5em;
	border-top: 1px dashed #666;
	padding-top: 5px;
	}
 
#drupal-logo {
	top: 22px;
	position: absolute;
	left: 31px;
	z-index: 5;
	}
 

в папке maintenance создаем последний файл "pngfix.js", а его содержание

// $Id: pngfix.js,v 1.1.2.1 2006/02/12 04:11:52 kencollins Exp $
 
 
// Drupal.js Global Killswitch
if (isJsEnabled()) {
  addLoadEvent(correctPNG);
}
 
// ------------------------------------------------------------------------
// |  Correctly handle PNG transparency in Win IE 5.5 or higher.          
// |  <a href="http://homepage.ntlworld.com/bobosola" title="http://homepage.ntlworld.com/bobosola">http://homepage.ntlworld.com/bobosola</a>.                              
------------------------------------------------------------------------
 
function correctPNG() 
   {
   for(var i=0; i<document.images.length; i++)
      {
    var img = document.images[i]
    var imgName = img.src.toUpperCase()
    if (imgName.substring(imgName.length-3, imgName.length) == "PNG")
       {
     var imgID = (img.id) ? "id='" + img.id + "' " : ""
     var imgClass = (img.className) ? "class='" + img.className + "' " : ""
     var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' "
     var imgStyle = "display:inline-block;" + img.style.cssText 
     if (img.align == "left") imgStyle = "float:left;" + imgStyle
     if (img.align == "right") imgStyle = "float:right;" + imgStyle
     if (img.parentElement.href) imgStyle = "cursor:hand;" + imgStyle    
     var strNewHTML = "<span " + imgID + imgClass + imgTitle
     + " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + 
";"
       + "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"
     + "(src=\'" + img.src + "\', sizingMethod='scale');\"></span>" 
     img.outerHTML = strNewHTML
     i = i-1
       }
      }
   }



теперь осталось последнее, открываем template.php из папки своего скина и в него добавляем

/**
 * Catch the theme_maintenance_page function in "includes/theme.inc", and redirect
 * through the template api and point Drupal to the "maintenance_page.tpl.php" file
 # to style the 503 Service Unavailable page when the site is offline. The phptemplate
 * variables function is used to get the $stie_name variable used on the page template.
*/ 
 
function phptemplate_maintenance_page($content) {
  return _phptemplate_callback('maintenance_page', array('content' => $content));
}

Все идем и смотрим


Опубликовано B.X в ср, 13/09/2006 - 00:20.

интересно... спасибо большое, сам бы я и не разобрался...
"создаем в этой же подпапке файл “maintenance.css”, с содержанием"
это надо именно с таким содержанием или с тем, что в моём css?
теперь осталось последнее, открываем template.php из папки своего скина и в него добавляем
куда добавляем? на какой строке? или заменяем то, что там было?
для человека не знающего php, у вас всё очень хорошо получается...


Опубликовано Shedko в ср, 13/09/2006 - 00:28.

это надо именно с таким содержанием или с тем, что в моём css?
этот css просто определяет стили этой страницы которая генерируется из "maintenance_page.tpl.php", я его пока не менял, так как и такая страничка мне нравится. :-) потом уж буду менять

куда добавляем? на какой строке? или заменяем то, что там было?
просто добавляем в конец этого файла, у меня сработало.


Опубликовано B.X в ср, 13/09/2006 - 00:34.

ясно, спасибо за развёрнутое пояснение... теперь осталось решить проблему страницы "нету коннекта к базе" и всё будет нормально...


Опубликовано Shedko в ср, 13/09/2006 - 00:57.

будем надеятся, что кто-нибудь уже возился с этим и поделится опытом, а то уж больно не хочется менять модули из "include" :-)


Опубликовано Ainur в чт, 22/03/2007 - 11:40.

Как вариант можно в файле template.php создать функицию phptemplate_maintenance_page и через неё сделать вывод страницы на обслуживании, странно что его в манулае друпала не описали, наверное потому что создать файл темы проще гораздо.


Опубликовано B.X в пт, 23/03/2007 - 00:52.

странно, что это не настраивается... и не входит в ядро...
такие ошибки довольно частое явление, их бывает видно и на достаточно серьёзных сайтах...


Новое на сайте