歡迎光臨, 訪客. 請先 登入註冊一個帳號.
十一月 26, 2024, 01:02:07 下午
19595 文章 在 3865 主題 由 4579 會員
最新註冊會員: aa123aa1
LifeType 中文開發論壇  |  開發  |  模版設計  |  請問關於管理介面額外增加資料的問題... « 上篇主題 下篇主題 »
頁: [1] 2
作者 主題: 請問關於管理介面額外增加資料的問題...  (閱讀 35138 次)
yuanyuan
新手見習
*
文章: 21


檢視個人資料
« 於: 七月 18, 2006, 06:45:46 下午 »

我想在登入後的管理頁面 統計資料下方
加上一些從資料庫中抓出來的東西(非lifetype預設的table)
不知道要怎麼做才好呢? 有沒有高手可以指點一下 感謝!!!

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


Mark Wu


檢視個人資料 個人網站
« 回覆文章 #1 於: 七月 18, 2006, 07:24:14 下午 »

你這樣講實在太模糊了。我實在不知怎麼幫起。

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

Mark
已記錄

yuanyuan
新手見習
*
文章: 21


檢視個人資料
« 回覆文章 #2 於: 七月 18, 2006, 07:50:42 下午 »

就是我想在紅色圈圈那個地方 加上從資料庫中抓出來的資料
(就是系統預設登入的管理介面)
我要抓的table 不是預設的 是後來自己建的
面板文字的方面 我知道要從templates/admin/dashboard.template這邊改
可是程式的部分 我不知道要從哪邊和如何改起... >"<

先說聲謝謝囉...

已記錄
markwu
系統管理員
超級會員
*****
文章: 3928


Mark Wu


檢視個人資料 個人網站
« 回覆文章 #3 於: 七月 19, 2006, 01:50:31 上午 »

所以你是想把圖書館的新書介紹加到 lifetype 的 dashboard 中嗎?

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

Mark
« 最後編輯時間: 七月 19, 2006, 01:57:11 上午 由 markwu » 已記錄

yuanyuan
新手見習
*
文章: 21


檢視個人資料
« 回覆文章 #4 於: 七月 19, 2006, 08:13:28 上午 »

no 我是要把minig後相關書籍的結果 放到管理介面上
沒有rss feed產出
已記錄
yuanyuan
新手見習
*
文章: 21


檢視個人資料
« 回覆文章 #5 於: 七月 19, 2006, 08:22:25 上午 »

no是指不是要做新書介紹 而是要做相關書籍推薦
一樣是要加到lifetype的dashboard中囉~~~
已記錄
yuanyuan
新手見習
*
文章: 21


檢視個人資料
« 回覆文章 #6 於: 七月 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 不是系統預設建好的...

感謝喔~~~ ^^
已記錄
markwu
系統管理員
超級會員
*****
文章: 3928


Mark Wu


檢視個人資料 個人網站
« 回覆文章 #7 於: 七月 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
« 最後編輯時間: 七月 19, 2006, 11:15:56 上午 由 markwu » 已記錄

yuanyuan
新手見習
*
文章: 21


檢視個人資料
« 回覆文章 #8 於: 七月 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熱心幫忙 感激不盡...
« 最後編輯時間: 七月 19, 2006, 08:43:27 下午 由 markwu » 已記錄
markwu
系統管理員
超級會員
*****
文章: 3928


Mark Wu


檢視個人資料 個人網站
« 回覆文章 #9 於: 七月 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
« 最後編輯時間: 七月 19, 2006, 09:36:49 下午 由 markwu » 已記錄

yuanyuan
新手見習
*
文章: 21


檢視個人資料
« 回覆文章 #10 於: 七月 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那邊才會是對的
可是不知道要怎麼做才好 @@
感謝 感謝!!!
已記錄
james
版主
超級會員
*****
文章: 823


哼!!你不說,誰會知道你做過那些修改呢!? (丟滑鼠~~)


檢視個人資料 個人網站
« 回覆文章 #11 於: 七月 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.
« 最後編輯時間: 七月 20, 2006, 04:00:03 下午 由 james » 已記錄

記得發問前,先使用搜尋功能找找看有沒相關的解答。
如果找不到,請依照如何在LifeType論壇發問來提問喔。
yuanyuan
新手見習
*
文章: 21


檢視個人資料
« 回覆文章 #12 於: 七月 20, 2006, 04:21:29 下午 »

可是降就只會傳回第一筆而已... @@ 我原本也是降寫 :P
因為資料不只一筆 我要把全部的資料抓出來... >"<
已記錄
markwu
系統管理員
超級會員
*****
文章: 3928


Mark Wu


檢視個人資料 個人網站
« 回覆文章 #13 於: 七月 21, 2006, 07:52:15 上午 »

這根寫程式的觀念有關了!

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

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

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

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

return $books;

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

Mark
已記錄

yuanyuan
新手見習
*
文章: 21


檢視個人資料
« 回覆文章 #14 於: 七月 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;
        }
« 最後編輯時間: 七月 27, 2006, 02:58:47 下午 由 yuanyuan » 已記錄
頁: [1] 2
LifeType 中文開發論壇  |  開發  |  模版設計  |  請問關於管理介面額外增加資料的問題... « 上篇主題 下篇主題 »
    前往: