<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Forum CakePHP.org.pl - CakePHP, Komponent -> dostęp do bazy]]></title>
	<link rel="self" href="http://forum.cakephp.org.pl/feed/atom/topic/6/"/>
	<updated>2008-02-24T23:19:22Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.cakephp.org.pl/topic/6/cakephp-komponent-dostep-do-bazy/</id>
		<entry>
			<title type="html"><![CDATA[Odp: CakePHP, Komponent -> dostęp do bazy]]></title>
			<link rel="alternate" href="http://forum.cakephp.org.pl/post/16/#p16"/>
			<content type="html"><![CDATA[<p>Dzięki !</p>]]></content>
			<author>
				<name><![CDATA[cakeowiec]]></name>
				<uri>http://forum.cakephp.org.pl/user/12/</uri>
			</author>
			<updated>2008-02-24T23:19:22Z</updated>
			<id>http://forum.cakephp.org.pl/post/16/#p16</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: CakePHP, Komponent -> dostęp do bazy]]></title>
			<link rel="alternate" href="http://forum.cakephp.org.pl/post/14/#p14"/>
			<content type="html"><![CDATA[<p><strong>Komponent :</strong><br /></p><div class="codebox"><pre><code>&lt;?php

class tabMenuComponent extends Object
{

    var $controller = true;

    var $user_model = &#039;User&#039;;
    var $group_model = &#039;Group&#039;;
    var $menu_model = &#039;Menu&#039;;
    var $melement_model = &#039;Melement&#039;;
    var $msubelemen_model = &#039;Msubelement&#039;;
    var $components = array(&#039;Session&#039;);

 
    function startup(&amp;$controller)
    {
        $this-&gt;controller = $controller;
    }
    
    function init($group_id){

        $menu = $this-&gt;controller-&gt;{$this-&gt;user_model}-&gt;{$this-&gt;group_model}-&gt;{$this-&gt;menu_model}-&gt;findAll(array(&#039;Menu.group_id&#039;=&gt;$group_id),null,null,null,null,2);
        $this-&gt;Session-&gt;write(&#039;full_menu&#039;, $menu[0]);
    }
    
    function getMenu(){
        return $this-&gt;Session-&gt;read(&#039;full_menu&#039;);
    }
}

?&gt;</code></pre></div><p><strong>Helper:</strong></p><div class="codebox"><pre><code>&lt;?php
class tabMenuHelper extends Helper{

    var $helpers = array(&#039;Html&#039;);
    var $li_class_main = &quot;activated&quot;;
    var $li_class_sub = &quot;activated_sub&quot;;
    
    var $main_menu_container = &#039;tnavmenu&#039;;
    var $sub_menu_container = &#039;tnavsubmenu&#039;;


    function showMenu($menu, $sub = true){
    
        $submenu = &#039;&#039;;
        $result = &quot;&lt;div id=\&quot;&quot; . $this-&gt;main_menu_container  . &quot;\&quot;&gt;&lt;ul&gt;\n&quot;;
        
        foreach ($menu[&#039;Melement&#039;] as $melement){
             $result.=$this-&gt;getMenuElement($melement, $submenu, $sub);
        }
        $result .= &quot;&lt;/ul&gt;&lt;/div&gt;\n&quot;;
        
        if ($sub)
            $result .= &quot;&lt;div id=\&quot;&quot;. $this-&gt;sub_menu_container .&quot;\&quot;&gt;&lt;ul&gt;&quot; . $submenu . &quot;&lt;/ul&gt;&lt;/div&gt;\n&quot;;
        
        return $result;
    }
    
    function getSubmenuElement($submenu){
        
        $result = &#039;&#039;;
                
        foreach ($submenu as $subelement){
            
            if($this-&gt;getActionNameCurrentPath() == $this-&gt;getActionNameLinkPath($subelement[&#039;link&#039;])){
                $result .= &#039;&lt;li class=&quot;&#039;.$this-&gt;li_class_sub .&#039;&quot;&gt;&#039;;
                
            }else{
                $result .= &#039;&lt;li&gt;&#039;;
            }

            if ($subelement[&#039;img&#039;] != &#039;&#039;){
                $obj = $this-&gt;Html-&gt;image($subelement[&#039;img&#039;]) . &#039;&lt;br/&gt;&#039; . $subelement[&#039;name&#039;];
            }else{
                $obj = $subelement[&#039;name&#039;];
            }            

            $result .= $this-&gt;Html-&gt;link($obj ,$subelement[&#039;link&#039;],array(&#039;title&#039;=&gt;trim($subelement[&#039;name&#039;])),false,false). &quot;&lt;/li&gt;\n&quot;; 
        }
        
        return $result;
    
    }

    function getMenuElement($melement, &amp;$submenu, $sub){

        $result = &#039;&#039;;
                
            if($this-&gt;getControllerNameCurrentPath() == $this-&gt;getControllerNameLinkPath($melement[&#039;link&#039;])){
                $result .= &#039;&lt;li class=&quot;&#039;.$this-&gt;li_class_main .&#039;&quot;&gt;&#039;;
                if ($sub){
                    $submenu =$this-&gt;getSubmenuElement($melement[&#039;Msubelement&#039;]);
                }
                
            }else{
                $result .= &#039;&lt;li&gt;&#039;;
            }

            if ($melement[&#039;img&#039;] != &#039;&#039;){
                $obj = $this-&gt;Html-&gt;image($melement[&#039;img&#039;]) . &#039;&lt;br/&gt;&#039; . $melement[&#039;name&#039;];
            }else{
                $obj = $melement[&#039;name&#039;];
            }
            
            $result .= $this-&gt;Html-&gt;link($obj ,$melement[&#039;link&#039;],array(&#039;title&#039;=&gt;trim($melement[&#039;name&#039;])),false,false). &quot;&lt;/li&gt;\n&quot;; 
        
        return $result;
    }

    
    function getControllerNameCurrentPath(){
        return $this-&gt;params[&#039;controller&#039;];
    }
    
    function getControllerNameLinkPath($link){
        $tmp = explode(&#039;/&#039;,$link);
        return $tmp[1];
    }
    
    function getActionNameCurrentPath(){
        return $this-&gt;param[&#039;action&#039;];
    }
    
    function getActionNameLinkPath($link){
        $tmp = explode(&#039;/&#039;,$link);
        return !empty($tmp[2]) ? $tmp[2] : &#039;index&#039;;
    }        
}
?&gt;</code></pre></div><p><strong>Kod sql dla Postgres&#039;a</strong></p><div class="codebox"><pre><code>CREATE TABLE menus
(
  id serial NOT NULL,
  group_id integer,
  CONSTRAINT pk_menus PRIMARY KEY (id),
)


CREATE TABLE melements
(
  id serial NOT NULL,
  menu_id integer NOT NULL,
  name character varying(50),
  link character varying(255),
  img character varying(255),
  CONSTRAINT pk_column_id PRIMARY KEY (id),
) 


CREATE TABLE msubelements
(
  id serial NOT NULL,
  melement_id integer,
  name character varying(50),
  link character varying(255),
  img character varying,
  CONSTRAINT pk_msubelement_id PRIMARY KEY (id)
)</code></pre></div><p>Dla stworzony tabel tworzymy modele a w nich dwie asocjacje:<br />* menu hasMany melement<br />* melement hasMany msubelement.</p><p>Dodajemy helper i komponent do kontrolera:<br /></p><div class="codebox"><pre><code>var $helpers = array(&#039;tabMenu&#039;);
var $components = array(&#039;tabMenu&#039;)</code></pre></div><p>Po udanej akcji logowania, pobieramy id grupy użytkownika i odpalamy akcje komponentu.<br /></p><div class="codebox"><pre><code>$group_id = $this-&gt;User-&gt;field(&#039;group_id&#039;,array(&#039;username&#039;=&gt;$this-&gt;data[&#039;User&#039;][&#039;username&#039;]));    
$this-&gt;tabMenu-&gt;init($group_id);</code></pre></div><p>Potem w layoucie, lub gdziekolwiek w widoku uruchamiamy:<br /></p><div class="codebox"><pre><code>echo $tabMenu-&gt;showMenu($this-&gt;controller-&gt;tabMenu-&gt;getMenu(), false);</code></pre></div><p>Ostatni parametr ustawiony jako <strong>false</strong> powoduje że nie pobierane będą elementy submenu.</p>]]></content>
			<author>
				<name><![CDATA[maciek]]></name>
				<uri>http://forum.cakephp.org.pl/user/6/</uri>
			</author>
			<updated>2008-02-24T13:34:01Z</updated>
			<id>http://forum.cakephp.org.pl/post/14/#p14</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: CakePHP, Komponent -> dostęp do bazy]]></title>
			<link rel="alternate" href="http://forum.cakephp.org.pl/post/13/#p13"/>
			<content type="html"><![CDATA[<p>Dziękuje za odpowiedź.</p><p>Jeśli możesz wyślij mi kod źródłowy -&gt; cakeowiec[małpa]gmail[kropka]com</p><p>Pozdrawiam</p>]]></content>
			<author>
				<name><![CDATA[cakeowiec]]></name>
				<uri>http://forum.cakephp.org.pl/user/12/</uri>
			</author>
			<updated>2008-02-24T02:05:59Z</updated>
			<id>http://forum.cakephp.org.pl/post/13/#p13</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: CakePHP, Komponent -> dostęp do bazy]]></title>
			<link rel="alternate" href="http://forum.cakephp.org.pl/post/11/#p11"/>
			<content type="html"><![CDATA[<p>Witam.<br />Nie znam odpowiedzi na Twoje pytanie, ponieważ nie spotkałem się dotąd w żadnym komponencie z pobieraniem nazwy kontrolera w którym był wywoływany, może bardziej zaawansowani użytkownicy znają taki sposób.<br />Ja natomiast mogę natomiast podzielić się z Tobą, jak ja wyświetlam menu.</p><p>Napisałem sobie komponent, który przy logowaniu pobiera menu dla danej grupy użytkowników.<br />Do tego komponentu dołożyłem jeszcze helper, który wykorzystuję do wyświetlania elementów menu i jeśli istnieje - submenu. Można również dodawać grafiki dla elementów, a po przejściu do danej strony z menu, jego odpowiednia pozycja jest oznaczana.</p><p>Jeśli byłbyś zainteresowany kodem źródłowym, to daj znać.<br />Pozdrawiam.</p>]]></content>
			<author>
				<name><![CDATA[maciek]]></name>
				<uri>http://forum.cakephp.org.pl/user/6/</uri>
			</author>
			<updated>2008-02-23T22:46:57Z</updated>
			<id>http://forum.cakephp.org.pl/post/11/#p11</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[CakePHP, Komponent -> dostęp do bazy]]></title>
			<link rel="alternate" href="http://forum.cakephp.org.pl/post/10/#p10"/>
			<content type="html"><![CDATA[<p>Witam,</p><p>Jak uzyskać bezpośrednio z komponentu dostęp do bazy ?</p><p>Mam coś takiego:</p><p>&lt;?php<br />function _zrob_obiekt($nazwa) {<br />&nbsp; &nbsp; $obj = &amp; new $nazwa();<br />&nbsp; &nbsp; return $obj;<br />}<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />function _zapytanie_do_bazy($zapytanie) {<br />&nbsp; &nbsp; $klasy = get_declared_classes();<br />&nbsp; &nbsp; $moje_klasy = array(&#039;Podstrony&#039;, &#039;Aktualnosci&#039;, &#039;Szukaj&#039;, &#039;Newsletter&#039;); // moje klasy w folderze controllers<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; for ($i = 0; $i &lt; count($klasy); $i++) {<br />&nbsp; &nbsp; &nbsp; &nbsp; for ($j = 0; $j &lt; count($moje_klasy); $j++) {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if ($klasy[$i] == $moje_klasy[$j] &amp;&amp; class_exists($moje_klasy[$j])) {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $this-&gt;Test = $this-&gt;_zrob_obiekt($moje_klasy[$j]);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return $this-&gt;Test-&gt;query($zapytanie);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; }<br />}<br />?&gt;</p><br /><br /><p>a chciałbym mieć dostęp do bazy w stylu $this-&gt;query($zapytanie); lub coś podobnego - bez sprawdzania który &#039;controllers&#039; jest aktualnie aktywny... - jest mi to potrzebne do m.in. generowania menu, które jest na każdej stronie takie samo...</p><p>Z góry dziękuje za odpowiedź.</p>]]></content>
			<author>
				<name><![CDATA[cakeowiec]]></name>
				<uri>http://forum.cakephp.org.pl/user/12/</uri>
			</author>
			<updated>2008-02-21T17:29:18Z</updated>
			<id>http://forum.cakephp.org.pl/post/10/#p10</id>
		</entry>
</feed>

