2011-05-12 14 views
1

我在尋找一種方式來顯示會員資料頁面上的一些內容類型的捐款數目。基本上,它能夠顯示這樣的事情:的Drupal:顯示貢獻(張貼的內容)的列表,每個用戶

博客(10)
文章(10)
問題(19)
評論(30)
技巧(3)

我已經安裝了一些不同的模塊(比如「用戶統計數據」),但我可以幫助我,但沒有成功。

我想知道如果它是最簡單的,只需將它硬編碼到我的模板文件中,方法是開始使用uid,然後僅運行一些查詢並顯示我想顯示的內容類型,但我不確定如何那也是。

任何幫助og建議將非常感激。

真誠 - Mestika

編輯:
我發現了一個解決方案,爲每個內容類型的查詢做手工,但我仍然在一個解決方案,更優雅,更流暢的很感興趣。

我用這個代碼:

global $user; 
$userid = $user->uid; 
$blog_count = db_result(db_query("SELECT COUNT(0) AS num FROM {node} n where n.type = 'blog' AND status = 1 AND n.uid = {$userid}")); 

回答

1

如果您使用的是核心簡檔模塊,你可以使用類似下面。它將顯示正在被查看的用戶所創建的節點。作爲一個額外的好處,它只需要執行一個自定義數據庫查詢。

插入此片段爲template.php在你的主題文件夾,並改變「THEMENAME」你的主題名稱:現在

function THEMENAME_preprocess_user_profile(&$variables) { 
    // Information about user profile being viewed 
    $account = $variables['account']; 

    // Get info on all content types 
    $content_types = node_get_types('names'); 

    // Get node counts for all content types for current user 
    $stats = array(); 
    $node_counts = db_query('SELECT type, COUNT(type) AS num FROM {node} WHERE status = 1 AND uid = %d GROUP BY type', $account->uid); 
    while ($row = db_fetch_array($node_counts)) { 
    $stats[] = array(
     'name' => $content_types[$row['type']], 
     'type' => $row['type'], 
     'num' => $row['num'], 
    ); 
    } 
    $variables['node_stats'] = $stats; 
} 

,在user-profile.tpl.php可以添加類似的東西:

// If user has created content, display stats 
<?php if (count($node_stats) > 0): ?> 

    // For each content type, display a DIV with name and number of nodes 
    <?php foreach ($node_stats as $value): ?> 
    <div><?php print $value['name']; ?> (<?php print $value['num']; ?>)</div> 
    <?php endforeach; ?> 

// Message to show for user that hasn't created any content 
<?php else: ?> 
    <?php print $account->name; ?> has not created any content. 
<?php endif; ?> 

這只是你可以做的一般想法。您還可以爲您查找/顯示的內容類型添加限制,檢查用戶的權限以查看這些統計信息,使用CSS更改統計信息的外觀等。

如果您使用的是Content Profile,則可以使用THEMENAME_preprocess_node()並檢查節點執行此代碼前有配置文件節點。

1

鑑於你簡單的需求,並且您有在手的SQL語句的事實,我想說的只是使用它。沒有理由爲您的網站添加另一個模塊,並且爲了單個查詢而影響其性能。

這就是說,從角度看「關注點分離」,你不應該只是放棄這一SQL在您的模板。相反,你應該將其結果添加到您的template.php文件中使用預處理功能可用變量列表,限制了它的範圍,你需要它,你沒有運行任何網頁這個數據庫查詢,但相應的個人資料頁面。