Strona 1 z 1

biblioteka PEAR POMOCY!!!

PostNapisane: Wt sty 27, 09 19:38
przez fellow
Czy istnieje jakas mozliwosc korzystania z bibliotek PEAR-la o ile jest dostepny na serwerach ugu? Jesli tak to jaka jest sciezka dostepu?
Moj problem to pobieranie danych z mysql. Oczywiscie na localhost(xampp) wszystko dziala
a po przeniesieniu plikow na ugu.pl wyskakuje blad:

Warning: ini_set() in /virtual/f/r/XXX.ugu.pl/include/config.inc.php on line 14
Warning: require_on in /virtual/f/r/XXX.ugu.pl/include/database.php on line 2


Rozumiem ze jest blad sciezki dostepu do biblioteki PEAR w pliku config.inc.php
Dla jasnosci przyblize troche danych:
plik config.inc.php
Kod: Zaznacz cały
// Stała SITE_ROOT zawiera pełną ścieżkę dostępu do glownego folderu na ugu
define("SITE_ROOT", dirname(dirname(__FILE__)));
...
// Aby biblioteka PEAR byla dostepna nalezy podac informacje o sciezce dostepu do katalogu w parametrze konfiguracyjnym include_path
i tu ponizej powstaje blad

if ((substr(strtoupper(PHP_OS), 0, 3)) == "WIN")
  define("PATH_SEPARATOR", ";");
else
  define("PATH_SEPARATOR", ":");
ini_set('include_path', SITE_ROOT . '/libs/pear' . PATH_SEPARATOR . ini_get('include_path'));

define("USE_PERSISTENT_CONNECTIONS", "true");
define("DB_SERVER", "mysql1.ugu.pl");
define("DB_USERNAME", "dbXXXXX");
define("DB_PASSWORD", "XXXXXXX");
define("DB_DATABASE", "dbXXXXX");
define("MYSQL_CONNECTION_STRING", "mysql://" . DB_USERNAME . ":" .
        DB_PASSWORD . "@" . DB_SERVER . "/" . DB_DATABASE);


Natomiast plik database.php
Kod: Zaznacz cały
<?php
require_once 'DB.php';
class DbManager
{
   public $db;

   function __construct($connectionString)
   {
      $this->db = DB::connect($connectionString, USE_PERSISTENT_CONNECTIONS);
      $this->db->setFetchMode(DB_FETCHMODE_ASSOC);
   }
   public function DbDisconnect()
   {
      $this->db->disconnect();
   }
   public function DbQuery($queryString)
   {
      $result = $this->db->query($queryString);
      return $result;
   }
   public function DbGetAll($queryString)
   {
      $result = $this->db->getAll($queryString);
      return $result;
   }
   public function DbGetRow($queryString)
   {
      $result = $this->db->getRow($queryString);
      return $result;
   }
   public function DbGetOne($queryString)
   {
      $result = $this->db->getOne($queryString);
      return $result;
   }
}
?>


Z tego wynika ze config nie pobiera biblioteki Pear?
Moze ktos ma jakis pomysl na rozwiazanie bede wdzieczny!!!

PostNapisane: Cz sty 29, 09 20:54
przez wargo
Te ostrzeżenia nie powinny mieć wpływu na połączenie.

Funkcja ini_set() jest zablokowana.

Jaki to jest skrypt?

PostNapisane: Pt sty 30, 09 11:30
przez fellow
Może nie powinny, ale widocznie mają. Podam zasade działania i proszę przetestować. Jest to trójwarstwowa architektura z wykorzystaniem SMARTY i biblioteki PEAR.
Wartswta dostępu do danych, Warstwa reguł bisnessu, Warstwa prezentacji:
Struktura katalogów:
data_obiects/do_catalog.php
bisness_objects/bo_catalog.php
include/top.php, config.inc.php, database.php, setup_smarty.php
libs/
    pear/pliki biblioteki PEAR
    smarty/pliki SMARTY
smarty_plugins/function.load_dzialy_list.php
templates/
    index.tpl
    dzialy_list.tpl

templates_c/kompilowane pliki

index.php

Jak to wszystko funkjonuje:
index.php
Kod: Zaznacz cały
<?php
// Załadowanie biblioteki Smarty i plików konfiguracyjnych
require_once 'include/top.php';
// załadowanie kodu warstwy bisnesowej
require_once SITE_ROOT.'/bisiness_objects/bo_catalog.php';
// Załadowanie szablonu Smarty
$page = new Page();
$page->display('index.tpl');
?>

zaladowany plik top.php w index.php z plikami konfiguracyjnymi
Kod: Zaznacz cały
<?php
require_once 'config.inc.php';
require_once 'setup_smarty.php';
require_once 'database.php';
$gDbManager = new DbManager(MYSQL_CONNECTION_STRING);
?>

plik config.inc.php
Kod: Zaznacz cały
// Stała SITE_ROOT zawiera pełną ścieżkę dostępu do folderu fregata
define("SITE_ROOT", dirname(dirname(__FILE__)));
// Parametry konfiguracyjne szablonów Smarty
define("SMARTY_DIR", SITE_ROOT."/libs/smarty/");
define("TEMPLATE_DIR", SITE_ROOT."/templates");
define("COMPILE_DIR", SITE_ROOT."/templates_c");
define("CONFIG_DIR", SITE_ROOT."/configs");

  define("PATH_SEPARATOR", ";");
ini_set('include_path', SITE_ROOT . "/libs/pear/" . PATH_SEPARATOR . ini_get('include_path'));

define("USE_PERSISTENT_CONNECTIONS", "true");
define("DB_SERVER", "localhost");
define("DB_USERNAME", "uzytkownik");
define("DB_PASSWORD", "haslo");
define("DB_DATABASE", "nazwadb");
define("MYSQL_CONNECTION_STRING", "mysql://" . DB_USERNAME . ":" .
        DB_PASSWORD . "@" . DB_SERVER . "/" . DB_DATABASE);

ustawienia smarty w pliku setup_smarty.php
Kod: Zaznacz cały
// Odwołanie do biblioteki Smarty
require_once SMARTY_DIR.'Smarty.class.php';
// Odwołanie do własnego pliku konfiguracyjnego
require_once 'config.inc.php';
// Klasa rozszerzająca klasę Smarty, przeznaczona do przetwarzania i wyświetlania
// plików szablonu Smarty
class Page extends Smarty
{
  // konstruktor
  function __construct()
  {
    // Wywołanie konstruktora klasy Smarty
    $this->Smarty();
    // Zmiana domyślnych ścieżek dostępu do katalogów
    $this->template_dir = TEMPLATE_DIR;
    $this->compile_dir = COMPILE_DIR;
    $this->config_dir = CONFIG_DIR;
    $this->plugins_dir[0] = SMARTY_DIR . 'plugins';
    $this->plugins_dir[1] = SITE_ROOT . "/smarty_plugins";
  }
}

database.php
Kod: Zaznacz cały
require_once 'DB.php';
class DbManager
{
   public $db;

   function __construct($connectionString)
   {
      $this->db = DB::connect($connectionString, USE_PERSISTENT_CONNECTIONS);
      $this->db->setFetchMode(DB_FETCHMODE_ASSOC);
   }
         public function DbGetAll($queryString)
   {
      $result = $this->db->getAll($queryString);
      return $result;
   }
}

dalsze przetwarzanie pliku index.php i zaladowanie bo_catalog.php
Kod: Zaznacz cały
require_once SITE_ROOT.'/data_objects/do_catalog.php';
// klasa warstwy logiki odpowiedzialna za pobieranie informacji o pozycjach katalogowych
class BoCatalog
{
     /* prywatne składowe */
     private $mDoCatalog;
     // konstruktor klasy inicjujący obiekt warstwy danych
     function __construct()
        {
          $this->mDoCatalog = new DoCatalog();
        }
     // pobranie informacji o wszystkich działach
     public function GetDzialy()
        {
          $result = $this->mDoCatalog->GetDzialy();
          return $result;
        }
}

zaladowanie z warstwy danych do_catalog i pobranie listy dzialow oraz ich id
Kod: Zaznacz cały
class DoCatalog
{
   // konstruktor klasy
   function __construct()
   {
   // odniesienie do obiektu klasy DbManager (powołanego w pliku app_top.php)
   $this->dbManager = $GLOBALS['gDbManager'];
   }
   // pobranie wszystkich informacji o działach
   public function GetDzialy()
   {
      $query_string = "SELECT dzial_id, nazwa FROM dzialy";
      $result = $this->dbManager->DbGetAll($query_string);
      return $result;
   }
}

warstwa prezentacji: laduje plik function.load_dzialy_list.php
Kod: Zaznacz cały
// nazwy funkcji zapisane w plikach modułów dodatków muszą mieć składnię: smarty_typ_nazwa
function smarty_function_load_dzialy_list($params, $smarty)
{
  $dzialy_list = new DepartmentsList();
  $dzialy_list->init();
  // zdefiniowanie zmiennej assign szablonu
  $smarty->assign($params['assign'], $dzialy_list);
}
// Obsługa listy działów
class DepartmentsList
{
  /* publiczne składowe dostępne z poziomu szablonu dzial_list.tpl */
  public $mDepartments;
  public $mSelectedDepartment;
  /* prywatne składowe */
  private $mBoCatalog;
  // konstruktor inicjuje obiekt warstwy logiki i odczytuje parametr ciągu tekstowego żadania GET
  function __construct()
  {
    // powołanie obiektu warstwy pośredniej
    $this->mBoCatalog = new BoCatalog();
    // jeżli w żądaniu GET występuje parametr DepartmentID, wyświetlane są informacje o dziale sklepu
    if (isset($_GET['DepartmentID']))
       $this->mSelectedDepartment = (int)$_GET['DepartmentID'];
    else
       $this->mSelectedDepartment = -1;
  }
  // wywołanie metody warstwy logiki, która odczyta listę działów i utworzy odpowiednie łącza
  function init()
  {
    // pobranie listy działów z warstwy logiki
    $this->mDepartments = $this->mBoCatalog->GetDzialy();
    // utworzenie ³±czy listy dzia³ów
    for ($i = 0; $i < count($this->mDepartments); $i++)
       $this->mDepartments[$i]['onclick'] = "index.php?DepartmentID=" . $this->mDepartments[$i]['dzial_id'];
  }
} //koniec klasy

utworzenie pliku do wyswietlenia listy dzialow dzialy_list.tpl
Kod: Zaznacz cały
{* dzialy_list.tpl *}
{load_dzialy_list assign="dzialy_list"}
{* początek listy działów *}
<table border="0" cellpadding="0" cellspacing="1" width="200">
  <tr>
    <td class="DepartmentListHead"> Wybierz dział </td>
  </tr>
  <tr>
    <td class="DepartmentListContent">
       {* iteracyjna analiza listy działów *}
             {section name=i loop=$dzialy_list->mDepartments}
       {* ustalenie czy dział jest zaznaczony i dobór odpowiedniej klasy stylu CSS *}
            {if ($dzialy_list->mSelectedDepartment == $dzialy_list->mDepartments[i].dzial_id)}
           {assign var=class_d value="DepartmentSelected"}
         {else}
           {assign var=class_d value="DepartmentUnselected"}
            {/if}
       {* utworzenie łącza dla każdego nowo dodanego działu listy *}
         <a class="{$class_d}" href="{$dzialy_list->mDepartments[i].onclick}">
            » {$dzialy_list->mDepartments[i].nazwa}
         </a>
         <br/>
             {/section}
    </td>
  </tr>
</table>
{* koniec listy działów *}
dodanie dzialy_list.tpl do index.tpl
Kod: Zaznacz cały
{config_load file="site.conf"}
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
  <head>
    <meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
    <title>{#sitetitle#}</title>
    <link href="styl.css" type="text/css" rel="stylesheet"/>
    <!--stuczka dla Microsoftu -->
<!--[if lt IE 7]>
    <link rel='stylesheet' type='text/css' href='styl-s.css' />
    <script src='/ie7/ie7-standard-p.js' type='text/javascript'></script>
<![endif]-->

  </head>
  <body>
    <div id='header'>
    naglowek
    </div>
    <div id='container'>
   <div id='first-column'>
{include file="dzialy_list.tpl"}
   </div>
   <div id='content'>
      tresc
   </div>
    </div>
    <div id='footer'>
   stopka
    </div>
  </body>
</html>

i to wlasciwie wszystko. powinna sie wyswietlic lista dzialow pobrana z bazy mysql.Testujcie a jak sa jakies uwagi to pisac w koncu po to sa fora bysmy sobie pomagali. A tak nawiasem mowiac TO ZARZADCY SERWEROW UGU POWINNI WYKAZAC LISTE FUNKCJI JAKIE SA ZABLOKOWANE LUB NIE DOSTEPNE!!! NIE UTRUDNIAJMY SOBIE ZYCIA!
Pozdrawiam :grin: