LifeType 中文開發論壇

開發 => 模版設計 => 主題作者是: yuanyuan 於 七月 18, 2006, 06:45:46 下午



主題: 請問關於管理介面額外增加資料的問題...
作者: yuanyuan七月 18, 2006, 06:45:46 下午
我想在登入後的管理頁面 統計資料下方
加上一些從資料庫中抓出來的東西(非lifetype預設的table)
不知道要怎麼做才好呢? 有沒有高手可以指點一下 感謝!!!

ps:我知道管理介面那頁 改文字之類的可以從 templates/admin/dashboard.template改
     但是若要加上從資料庫中抓出來的東西 就不知道要從何改起或加起了...
     先在此感謝!!!


主題: Re: 請問關於管理介面額外增加資料的問題...
作者: markwu七月 18, 2006, 07:24:14 下午
你這樣講實在太模糊了。我實在不知怎麼幫起。

麻煩在精確一點描述你的問題。

Mark


主題: Re: 請問關於管理介面額外增加資料的問題...
作者: yuanyuan七月 18, 2006, 07:50:42 下午
就是我想在紅色圈圈那個地方 加上從資料庫中抓出來的資料
(就是系統預設登入的管理介面)
我要抓的table 不是預設的 是後來自己建的
面板文字的方面 我知道要從templates/admin/dashboard.template這邊改
可是程式的部分 我不知道要從哪邊和如何改起... >"<

先說聲謝謝囉...



主題: Re: 請問關於管理介面額外增加資料的問題...
作者: markwu七月 19, 2006, 01:50:31 上午
所以你是想把圖書館的新書介紹加到 lifetype 的 dashboard 中嗎?

這些 新書介紹有 rss feed 的產出嗎?

Mark


主題: Re: 請問關於管理介面額外增加資料的問題...
作者: yuanyuan七月 19, 2006, 08:13:28 上午
no 我是要把minig後相關書籍的結果 放到管理介面上
沒有rss feed產出


主題: Re: 請問關於管理介面額外增加資料的問題...
作者: yuanyuan七月 19, 2006, 08:22:25 上午
no是指不是要做新書介紹 而是要做相關書籍推薦
一樣是要加到lifetype的dashboard中囉~~~


主題: Re: 請問關於管理介面額外增加資料的問題...
作者: yuanyuan七月 19, 2006, 10:00:01 上午
我知道像最近發表文章等等的 在dashboard.template中是降抓出來的
                        {foreach from=$recentposts[$blogId] item=post}
                        <tr style="background-color: {cycle values="#FFFFFF,#F7F7F7"};">
                            <td>
                                <a target="_blank" href="{$url->postPermalink($post)}">{$post->getTopic()|strip_tags}</a><br/>
                            </td>
                        </tr>
                        {/foreach}

如圖 我複製了一個在我想要的位置...
但是我不知道 像from=$recentposts[$blogId]和item=post 這些東東
我應該去哪邊改 才可以去抓到我想要抓的資料?
而我想抓的這個table 不是系統預設建好的...

感謝喔~~~ ^^


主題: Re: 請問關於管理介面額外增加資料的問題...
作者: markwu七月 19, 2006, 11:10:57 上午
看起來像是 博客來可以作的功能  :-)。你可以修改 admindashboardview.class.php,LifeType 使用 MVC 架構,所以你必須先透過 model 把資料撈到 view,然後再 assign 到 template。

程式碼:
你可以在  admindashboardview.class.php 中加入一個 method 去撈外部資料,我假設你是用 userID 去撈不同user 的 mining 結果

_loadMiningResults( $userId ) // 這個就是 model ...
{
    你的程式

    retrun 你的資料; //如果 是多筆輸出請用  array
}

然後在同一個程式中的 _loadViewData()中加入

程式碼:
$books = array();
$books = $this->_loadMiningResults( $this->_userInfo->getUserId() ); // 這邊是我跟你說,假設用 userId 去撈資料

....

$this->_params->setValue( "books", $books  ); // 把 $books 資料 傳遞到 dashboard view

這樣你就可以在 dashboard.template 中用

程式碼:
{foreach from=$books item=book}
    {$book['name']}: {$book['author']}
{/foreach}

來使用模版變數。這只是個大概。

Mark


主題: Re: 請問關於管理介面額外增加資料的問題...
作者: yuanyuan七月 19, 2006, 06:45:47 下午
我在admindashboardview.class.php 加了紅字的內容...
function _loadViewData()
      {         
         // for each blog, load some statistics
         $articles = new Articles();
         $comments = new ArticleComments();
         $trackbacks = new Trackbacks();
         $resources = new GalleryResources();
         $recentPosts = Array();
         $recentComments = Array();
         $recentResources = Array();
         //-------------------------------------------------------------------------------------------
         $mining = Array();
            $mining = $this->_loadMiningResults( $this->_userInfo->getUsername());  
                                                                //-------------------------------------------------------------------------------------------
         // load some statistics   for each one of the blogs
         foreach( $this->_userBlogs as $userBlog ) {
            $recentPosts[$userBlog->getId()] = $articles->getBlogArticles( $userBlog->getId(),
                                                            -1,
                                                            DASHBOARD_MAX_RECENT_ITEMS,
                                                            0,
                                                            POST_STATUS_PUBLISHED );
            $recentComments[$userBlog->getId()] = $comments->getBlogComments ( $userBlog->getId(), DASHBOARD_MAX_RECENT_ITEMS );
            $recentTrackbacks[$userBlog->getId()] = $trackbacks->getBlogTrackbacks( $userBlog->getId(), DASHBOARD_MAX_RECENT_ITEMS );
         }
      
         $this->_params->setValue( "userblogs", $this->_userBlogs );
         $this->_params->setValue( "recentposts", $recentPosts );
         $this->_params->setValue( "recentcomments", $recentComments );
         $this->_params->setValue( "recenttrackbacks", $recentTrackbacks );
            //----------------------------------------------------------------------------------------------
            $this->_params->setValue( "mining", $mining );  
            //----------------------------------------------------------------------------------------------   
      }
還有這個Model
//---------------------------------------------------------------------------
      function _loadMiningResults( $userId  )
        {
           $lnk = mysql_connect('localhost','帳號','密碼') or die("無法連線到該資料庫");
           mysql_select_db('lifetype',$lnk)or die("無法連線到該資料庫");

           //echo $id;
           $sql = "select MARC_ID FROM history WHERE (ID = '$userId')";
           $result = mysql_query($sql);
         //echo $sql;

           while ($row = mysql_fetch_object($result))
             {   
               $MARC_ID=$row->MARC_ID;

               $sql1 = "select MARC_ID1 FROM mining WHERE (MARC_ID = ".$MARC_ID.")";
               $result1 = mysql_query($sql1);
               //echo $sql1;
 
               while ($row = mysql_fetch_object($result1))
                 {   
                    $MARC_ID1=$row->MARC_ID1;
                    //echo $MARC_ID1;

                    sybase_min_server_severity(11);
                    $conn = sybase_connect("NCTU-T22", "帳號", "密碼") or die("Could not connect !");
                    //echo $conn;
                    sybase_select_db("totals2",$conn);

                    $sql2 = "select * FROM Mar3100 WHERE (MARC_ID = ".$MARC_ID1.")";
                    $result2 = sybase_query($sql2);
                    //echo $sql2;
 
                      while($row = sybase_fetch_assoc($result2))
                        {     
                          $MARC_ID1 = $row["MARC_ID"];
                          $title2 = $row["TITLE"];
                    //echo $title2;

                    return $title2;

                          /*if ( $MARC_ID1 <> "" ){
                          echo "<p><a href='http://XXX.XXX.XXX.XXX/book/check.php?id=".$MARC_ID1."&T=0&ty=ie'>$title2</a></p>";
                          }*/
                        }
                  
                 }
            
             }
         
         /*if ($MARC_ID1 == ""){
           echo "無推薦書籍";
           }*/

在dashboard.template裡面加了這一段
{foreach from=$mining item=mining}
         
                        <tr style="background-color: {cycle values="#FFFFFF,#F7F7F7"};">
                            <td>
                                <a target="_blank" href="">{$mining}</a><br/>
                            </td>
                        </tr>
                        {/foreach}


發生了一個問題...
在程式裡面 ehco出的資料筆數是對的(三筆) 可是只要用return 筆數就會只剩第一筆...
可是不return 就一筆資料也沒有... @@
是return的用法錯了嗎? 還是應該要用別的呢?
return array也是一樣 >"<

謝謝Mark熱心幫忙 感激不盡...


主題: Re: 請問關於管理介面額外增加資料的問題...
作者: markwu七月 19, 2006, 08:56:33 下午
下次記得,連 IP 都要隱藏。

再來是,你程式不能這麼 『return』.... 這樣當然指傳回一筆資料 .... 我假設你要傳出來的值是 title2:

1. 那麼你必須先初始一個 array,假設是 $books = Array();
2. 然後把 title2 存進 books 裡面, $books[]=$title2;
3. 然後才是 return $books

這樣,你 _loadMiningResults() 才能取得 books ...你現在,一抓到資料就 return 出來,當然只有一筆。而且還是傳出字串變數,並非是陣列。

另外,不要把 echo等等放進程式中 ....  記得 M/V/C 是要分離的!

這是要在 template 判斷的:

引用
{if $books}
   {foreach from=$mining item=mining}
       <tr style="background-color: {cycle values="#FFFFFF,#F7F7F7"};">
          <td>
             <a target="_blank" href="">{$mining}</a><br/>
          </td>
       </tr>
   {/foreach}
{else}
    無相關書籍
{/if}

btw, 我只有一個小小要求!如果成功了,寫個心得分享一下怎麼整合的就可了。因為別人可能也需要。 :-) 謝謝!

Mark


主題: Re: 請問關於管理介面額外增加資料的問題...
作者: yuanyuan七月 20, 2006, 02:38:29 下午
不好意思 對這東西實在沒什麼辦法 @@
我把array的東東寫在最後一個while這邊 可是還是都是抓到第一筆資料 然後重複了五次 >"<
程式如下:

$books = Array();
  while($row = sybase_fetch_assoc($result2))
    { 
      $MARC_ID1 = $row["MARC_ID"];
      $title2 = $row["TITLE"];

        for ($i=0; $i<=4; $i++){
          $books[$i]=$title2;
        }
       return $books;
     }

好像要降 $books[]=1;
                 $books[]=2;
                 $books[]=3;
把不同的值抓出來 傳到return $books那邊才會是對的
可是不知道要怎麼做才好 @@
感謝 感謝!!!


主題: Re: 請問關於管理介面額外增加資料的問題...
作者: james七月 20, 2006, 03:55:36 下午
不好意思 對這東西實在沒什麼辦法 @@
我把array的東東寫在最後一個while這邊 可是還是都是抓到第一筆資料 然後重複了五次 >"<
程式如下:

$books = Array();
  while($row = sybase_fetch_assoc($result2))
    { 
      $MARC_ID1 = $row["MARC_ID"];
      $title2 = $row["TITLE"];

        for ($i=0; $i<=4; $i++){
          $books[$i]=$title2;
        }
       return $books;
     }

好像要降 $books[]=1;
                 $books[]=2;
                 $books[]=3;
把不同的值抓出來 傳到return $books那邊才會是對的
可是不知道要怎麼做才好 @@
感謝 感謝!!!

你原來的寫法的確是會重覆5次(因為你的迴圈的確是要它跑5次)
另外因為你在跑完5次後立刻return 這個array,因此結果當然就是傳回你看到的樣子囉.

下面的方式,是在整個while loop跑完後再傳回$books,試看看囉:)

$books = Array();
  while($row = sybase_fetch_assoc($result2))
    { 
      $MARC_ID1 = $row["MARC_ID"];
      $title2 = $row["TITLE"];
       $books[]=$title2;
     }
       return $books;

James.


主題: Re: 請問關於管理介面額外增加資料的問題...
作者: yuanyuan七月 20, 2006, 04:21:29 下午
可是降就只會傳回第一筆而已... @@ 我原本也是降寫 :P
因為資料不只一筆 我要把全部的資料抓出來... >"<


主題: Re: 請問關於管理介面額外增加資料的問題...
作者: markwu七月 21, 2006, 07:52:15 上午
這根寫程式的觀念有關了!

你必須先瞭解你的程式怎麼運作!

你的程式有三個 while 回圈,問題來了,你的 $book = Array() 應該放在哪?你如果放在第一層外面?還是第一層與第二層中間?還是第三層裡面?

另外, return 的位置也有關係, return 會中斷程式運作,直接把值返回,你目前放的位置對嗎?

$books = Array();
while ( xxxx ) {
    while(yyyy) {
          while (zzzzz) {
               $books[]=$title;
          }
    }
}

return $books;

這只是大概,你要自己去嘗試!

Mark


主題: Re: 請問關於管理介面額外增加資料的問題...
作者: yuanyuan七月 27, 2006, 02:44:12 下午
還有一個問題... @@ 請原諒我問題那麼多 >"<

就是在dashboard.template的地方 我想讓超連結可以抓到我的$MARC_ID1這個變數
但是foreach好像不能降用...

{foreach from=$mining item=mining}
{foreach from=$mids item=mids}
  <tr style="background-color: {cycle values="#FFFFFF,#F7F7F7"};">
    <td>
       <a target="_blank" href="http://xxx.xxx.xxx.xxx/book/check.php?id={$mids}">{$mining}</a><br/>
    <td>
  </tr>
{/foreach}
{/foreach}

會有$title和$MARC_ID1對不起來的問題...

請問我應該在dashboard.template怎麼改
或是在admindashboardview.class.php的function _loadMiningResults Model怎麼改
才可以把我想要的變數$MARC_ID1 傳到超連結裡呢? 謝謝!!!

以下是可以顯示$title的function _loadMiningResults Model
function _loadMiningResults( $userId  )
        {
           $lnk = mysql_connect('l','','') or die("無法連線到該資料庫");
           mysql_select_db('lifetype',$lnk)or die("無法連線到該資料庫1");

           $sql = "select MARC_ID FROM history WHERE (ID = '$userId')";
           $result = mysql_query($sql);
         
           $books = Array();
         
           while ($row = mysql_fetch_object($result))
             {   
               $MARC_ID=$row->MARC_ID;

               $sql1 = "select MARC_ID1 FROM mining WHERE (MARC_ID = ".$MARC_ID.")";
               $result1 = mysql_query($sql1);
 
               
               while ($row = mysql_fetch_object($result1))
                 {   
                    $MARC_ID1=$row->MARC_ID1;

                    sybase_min_server_severity(11);
                    $conn = sybase_connect("", "", "") or die("Could not connect !");
                    sybase_select_db("totals2",$conn);

                    $sql2 = "select * FROM Mar3100 WHERE (MARC_ID = ".$MARC_ID1.")";
                    $result2 = sybase_query($sql2);
             
                      while($row = sybase_fetch_array($result2))
                        {     
                   
        $MARC_ID1 = $row["MARC_ID"];
                          $title = $row["TITLE"];
                          $books[]=iconv("big5","UTF-8",$title);
                        }
                 }
            
             }
          return $books;
        }


主題: Re: 請問關於管理介面額外增加資料的問題...
作者: lss七月 27, 2006, 03:45:47 下午
還有一個問題... @@ 請原諒我問題那麼多 >"<

就是在dashboard.template的地方 我想讓超連結可以抓到我的$MARC_ID1這個變數
但是foreach好像不能降用...

{foreach from=$mining item=mining}
{foreach from=$mids item=mids}
  <tr style="background-color: {cycle values="#FFFFFF,#F7F7F7"};">
    <td>
       <a target="_blank" href="http://xxx.xxx.xxx.xxx/book/check.php?id={$mids}">{$mining}</a><br/>
    <td>
  </tr>
{/foreach}
{/foreach}

會有$title和$MARC_ID1對不起來的問題...
....
以上的 $mids 應該不是筆誤吧?

lss


主題: Re: 請問關於管理介面額外增加資料的問題...
作者: yuanyuan七月 27, 2006, 04:22:54 下午
不是呀...
為什麼會問是不是筆誤呢?
是保留字還是有什麼特殊意義咩?

我就另外寫了一個function 然後用$mids傳$MARC_ID1到dashboard.template $mining是傳$title的
但是就是會有$title和$MARC_ID1對不起來的情形 >"<


主題: Re: 請問關於管理介面額外增加資料的問題...
作者: lss七月 27, 2006, 04:45:49 下午
那就是 smarty 語法的邏輯錯誤囉!正確的用法是:

{foreach from=$陣列 item=變數名}

然後, $變數名 是從 foreach 迴圈裡取出的陣列元素。你的寫法,會在迴圈裡把陣列變成一個字串變數。

詳細請參考 smarty 官方網站的說明: http://smarty.php.net/manual/en/language.function.foreach.php

lss


主題: Re: 請問關於管理介面額外增加資料的問題...
作者: yuanyuan八月 24, 2006, 04:21:30 下午
這個我改過了 但是類似的問題還是存在 @@
我現在改成降

{foreach from=$mining item=mining1}
  {foreach from=$mids item=mids1}
    <a target="_blank" href="http://xxx.xxx.xxx.xx/book/check.php?id=">{$mids1}{$mining1}</a><br/>
  {/foreach}
{/foreach}

但就會變成9個 如圖
3個idX3本書名 就變成九個了 @@
要怎麼做 才能變成降呢
278462讓說不Very Easy
311057創造人生DIY
310920時間的開發與管理
感謝感謝!!!


主題: Re: 請問關於管理介面額外增加資料的問題...
作者: yuanyuan八月 28, 2006, 03:24:12 下午
這個問題 沒有人可以指點我一下咩  :'(