私はこれらの2つのブロック同一コードを私のPHPモジュールの1つに持っています。これら2つのブロックの唯一の違いは、最初のブロックでは... active = ' .$db->q('1'));
および2番目のブロックで... active = ' .$db->q('0'));
これらの両方のブロックに共通のPHP function say subjectlist()を作成してから、引数_0
_および_1
_をそれぞれ渡して、コード。
のように、subjectlist(0);
subjectlist(1);
最初のブロック
_<?php
// getting branch, semester and subject code of present classes of the teacher
$query1 = $db->getQuery(true);
$query1->select('sem,code')
->from('iust_teachers_classes')
->where('teacher = '. $db->q($user->username). 'and active = ' .$db->q('1'));
$db->setQuery($query1);
$sem_code = $db->loadObjectlist();
echo "<h3>List of present classes : </h3> <br>";
// Loop to populate the list of all present classes of the teacher
foreach ($sem_code as $rows) {
$query2 = $db->getQuery(true);
$query2->select('subject')
->from('iust_subjects')
->where('sem = '. $db->q($rows->sem). 'and code = ' .$db->q($rows->code));
$db->setQuery($query2);
$sub_list = $db->loadObjectlist();
// echoing the active subject list
foreach ($sub_list as $rows) {
echo $rows->subject;
echo "<br>";
}
}
?>
_
2番目のブロック
_<?php
// getting branch, semester and subject code of previous classes of the teacher
$query3 = $db->getQuery(true);
$query3->select('sem,code')
->from('iust_teachers_classes')
->where('teacher = '. $db->q($user->username). 'and active = ' .$db->q('0'));
$db->setQuery($query3);
$sem_code = $db->loadObjectlist();
echo "<h3>List of previous classes : </h3> <br>";
// Loop to populate the list of all previous classes of the teacher
foreach ($sem_code as $rows) {
$query4 = $db->getQuery(true);
$query4->select('subject')
->from('iust_subjects')
->where('sem = '. $db->q($rows->sem). 'and code = ' .$db->q($rows->code));
$db->setQuery($query4);
$sub_list = $db->loadObjectlist();
// echoing the previous subject list
foreach ($sub_list as $rows) {
echo $rows->subject;
echo "<br>";
}
}
?>
_
助けていただければ幸いです。
クエリで結合を使用して2ではなく1クエリを使用できるように見えますが、次のようなものが必要だと思います。
function subjectlist($username,$active){
$html = "";
// getting branch, semester and subject code of present classes of the teacher
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('sem,code')
->from('iust_teachers_classes')
->where('teacher = '. $db->q($username). 'AND active = ' .$db->q($active));
$db->setQuery($query);
$sem_codes = $db->loadObjectlist();
// Loop to populate the list of all present classes of the teacher
foreach ($sem_codes as $sem_code) {
$query = $db->getQuery(true);
$query->select('subject')
->from('iust_subjects')
->where('sem = '. $db->q($sem_code->sem). 'AND code = ' .$db->q($sem_code->code));
$db->setQuery($query);
$sub_list = $db->loadObjectlist();
// build the html to return
$html .= "<h3>List of present classes : </h3> <br>";
foreach ($sub_list as $sub_item) {
$html .= $sub_item->subject . "<br>";
}
return $html;
}
}
// best to pass the username to make the function more reusable
$username = JFactory::getUser()->username;
echo subjectlist($username,0);
echo subjectlist($username,1);
拡張機能に属していると想定して、この関数をhelper.phpファイルに配置することをお勧めします。この場合は、例としてモジュールを使用します。
helper.php:
_class MyHelperFile
{
public function subjectlist($active)
{
$db = JFactory::getDbo();
$user = JFactory::getUser();
$html = '';
$query = $db->getQuery(true);
$query->select('sem, code')
->from($db->qn('iust_teachers_classes'))
->where($db->qn('teacher') . ' = ' . $db->q($user->username))
->where($db->qn('active') . ' = ' . (int)$active);
$db->setQuery($query);
$rows = $db->loadObjectlist();
$html .= '<h3>List of present classes :</h3>';
$html .= '<ul>';
// Loop to populate the list of all present classes of the teacher
foreach ($rows as $row)
{
$query = $db->getQuery(true);
$query->clear();
$query->select('subject')
->from($db->qn('iust_subjects'))
->where($db->qn('sem') . ' = ' . $db->q($row->sem))
->where($db->qn('code') . ' = ' . $db->q($row->code));
$db->setQuery($query);
$rows = $db->loadObjectlist();
// echoing the active subject list
foreach ($rows as $row)
{
$html .= '<li>' . $row->subject . '</li>';
}
}
$html .= '</ul>';
return $html;
}
}
_
mod_mymodule.php
_require_once dirname(__FILE__) . '/helper.php';
$helper = new MyHelperFile();
$subjectlist_0 = $helper->subjectlist(0);
$subjectlist_1 = $helper->subjectlist(1);
_
コードに示すように、パラメーターとして渡すのではなく、ユーザーオブジェクトを呼び出して関数内でユーザー名を取得することをお勧めします。
また、コードをいくつか改善しました。
もちろん、2番目のクエリをforeach
ループで実行するよりも、1つのクエリでjoin()
句を使用する方がベターです。
まあ、開発の段階では、ビルドするものを検討するのが遅いかもしれませんが、 JooYiiライブラリのモデル の特定のメソッドの実装を確認できます。
列の値を「条件」配列として渡すことにより、テーブルのクエリを生成する方法があります。
このクラスを使用すると、クエリを生成できるだけでなく、他の関数と一緒にページ分割を使用してリストを取得できます。