2016-07-12 2 views
4

こんにちは!Joomla Ajax jQuery

joomlaのコンポーネントの「カスタム」ページネーションに問題があります。

ユーザーの記事のリストを作成したかったので、1ページあたり3つの投稿が表示されます。私の目標は、ウェブページをリフレッシュせずにページ区切りをにすることでした。 Ajaxが最良の選択でした。私は今それと戦っており、これまでのところ最も困難な問題を抱えています(私は自分の問題の答えを数時間検索しようとしました)。

user.php

<div class="userRightContainer"> 
      <div class="blogArticlesBlock"> 
      <div class="userItemTagsBlock"><b>Debaty na forum użytkownika(<?php echo $joomla_rows; ?>)</b></div> 

      <?//artykuly joomla 
      ?> 

     <div id="Joomla_block" class="Joomla_block"> 
      <? require_once("Db_joomla.php") ?> 
     </div> 

... 
... 
... 

<script type="text/javascript"> 

function jm_previous(arg) { 
    if(arg < 0) 
     changePagination(0); 
    else 
    changePagination(arg); 
} 
function jm_next(argument) { 
    changePagination(argument); 
} 

function changePagination(pageId){ 

        // $("#Joomla_block").html(''); 
    jQuery.ajax({ 
      type: "GET", 
      // url: "Db_joomla.php", 
      url: window.location.href, 
      data: { jm_start: pageId}, 
      success: function(result){ 
        alert(result); 
        $("#Joomla_block").html(result); 

      } 
     }); 
} 
</script> 

Db_joomla.php

defined('_JEXEC') or die; 
// 
$offset_jm=$_GET["jm_start"]; 
if(empty($offset_jm)) $offset_jm=0; 
// 
$db = JFactory::getDbo(); 
$query = $db->getQuery(true); 
$query->select($db->quoteName(array('id', 'title', 'introtext', 'created_by', 'state'))); 
$query->from($db->quoteName('#__content')); 
$query->where($db->quoteName('created_by') . ' LIKE ' . $db->quote(JRequest::getInt('id'))); 
$query->where('state', '1'); 
$query->setLimit($joomla_page,$offset_jm); 
$db->setQuery($query); 
$joomla=$db->loadObjectList(); 
$joomla_rows = $db->loadResult(); 


if($joomla_rows > 0){ 
foreach($joomla as $row) { 
if ($row->created_by != JRequest::getInt('id')) continue; 
?> 
      <div class="articlesBlock" style="margin: 5px;"> 
       <!-- Avatar --> 
     <img src="<?php echo $this->user->avatar; ?>" alt="<?php echo htmlspecialchars($this->user->name, ENT_QUOTES, 'UTF-8'); ?>" style="width:50px; height:auto;border: 1px solid #ccc; float:left;margin: 5px;" /> 
        <div class="blogArticlestTitle" style="padding-left:60px;font-weight:bold;word-wrap:break-word;"><a href="index.php?option=com_content&view=article&id=<?php echo $row->id;?>"><?php echo $row->title ?></a></div> 
        <div class="blogArticlesDescription" style="padding: 5px;padding-top:10px;"><?php if (str_word_count($row->introtext) > 100) echo /* Wstawia komentarz i ogranicza tekst do stu znaków, po czym dodaje kropki.*/ substr(strip_tags($row->introtext), 0, 100) . "..."; else echo strip_tags($row->introtext);?> 
        </div> 
        <div class="CommentViewMore"> 
        <a href="index.php?option=com_content&view=article&id=<?php echo $row->id;?>">Przejdź do artykułu ›</a> 
        </div> 
       </div> 
<?php 
/* 
    $item_counting++; 
    if($item_counting == 5) break;*/ 
         } 


//echo $pageNav->getListFooter(); //Displays a nice footer 
     ?> 
<ul class="pager"> 
    <li><a href="javascript:void(0)" id="jm_previous" onclick="jm_previous(<? echo $offset_jm-$joomla_page; ?>)" style="background-color: #000;float:left;"><<</a></li> 
    <li><a href="javascript:void(0)" id="jm_next" onclick="jm_next(<? echo $offset_jm+$joomla_page; ?>)" style="background-color: #000;float:right;">>></a></li> 
</ul> 
    <a class ="view_more_link"href="http://konfederaci.pl/index.php/component/komento/profile/id/<?php echo JRequest::getInt('id');?>" title="Artykuły użytkownika">Zobacz wszystkie artykuły</a> 
    <?php 
    } 
     else 
{ 

    echo "Ten użytkownik nie posiada żadnych postów na forum."; 
} 

今いくつかの写真:

From alert(result)

From google chrome's console

シモンズ: 私は「URL: "を選択した場合、このスクリプトでDb_joomla.phpを" それが何かをすることはありません。まだ動作しません(そして同じ例外があります)。

答えて

1

あなたの実装よりも、JoomlaのAjaxインターフェースに頼っている方が良いでしょう。それは超シンプルで非常に効率的で、動作します。我々はそれを使用する方法について書いたhere

本質的には、コールを処理するために使用される関数(名前の末尾にAjaxという単語がある)を含む単純なモジュールを作成/変更します。

次に、com_ajaxインターフェイスを通じてモジュールを呼び出す簡単なjqueryコードを追加する必要があります。 ajax呼び出しのメニュー項目のIDが必要なので、モジュールをメニュー項目に割り当てておく必要があることに注意してください。

1

簡単な実践: あなたのajaxバックエンドの部分は、PHPコードのみを含む必要があります。 (DBクエリを取得する)。 次はPHPがJSON配列を返します。 このJSONをajaxリクエストで取得し、このデータをビューにプッシュします。 単純に私はmy plugin "plg_ajax"を使用します(インストール後はonAjaxAjax()メソッドを参照)。 com_ajaxと、このプラグインの スクリプト例ポスト:

type: "POST", 
 
      async: true, 
 
      url: "index.php?option=com_ajax&plugin=ajax&format=json", 
 
      dataType: "json",