I relly needed to show the user only articles in his language. 1.4m2 is a good starting point for this behaviour, even though it requires a few changes.
This post is quite long, but there are really few changes needed:
- restrict allowed languages
- Remove unneeded languages by deleting language files in the lang subdirectory
- Delete unneeded languages entry in the $LANGINI array in inc/languages.php line 22
- Edit inc/functions.php and change several functions (most changes consist in adding $LANG as a global variable, and adding a condition to the SQL query: faqdata.lang='$LANG')
- function generateNumberOfArticles
function generateNumberOfArticles()
{
global $db, $LANG;
$num = $db->num_rows($db->query("SELECT id FROM ".SQLPREFIX."faqdata WHERE active = 'yes' AND lang='$LANG'"));
if ($num > 0) {
return "<b>".$num."</b>";
}
else {
return "<b>0</b>";
}
} - function printCategoriesPlusNumber
function printCategoriesPlusNumber()
{
global $db, $sids, $msgEntries, $err_noHeaders, $LANG;
$result = $db->query("SELECT ".SQLPREFIX."faqrubrik.rubrik, ".SQLPREFIX."faqrubrik.titel, count(".SQLPREFIX."faqdata.rubrik) AS number FROM ".SQLPREFIX."faqrubrik LEFT JOIN ".SQLPREFIX."faqdata ON ".SQLPREFIX."faqdata.rubrik = ".SQLPREFIX."faqrubrik.rubrik AND ".SQLPREFIX."faqdata.active = 'yes' AND ".SQLPREFIX."faqdata.lang='$LANG' GROUP BY ".SQLPREFIX."faqrubrik.rubrik ORDER BY ".SQLPREFIX."faqrubrik.rubrik");
$output = "";
if ($db->num_rows($result) > 0) {
while ($row = $db->fetch_object($result)) {
$layer = (strlen($row->rubrik) / 3) - 1;
for ($h = 1; $h <= $layer; $h++):
$output .= "\t ";
endfor;
$output .= "\t<b>·</b> <a href=\"".$_SERVER["PHP_SELF"]."?".$sids."action=show&cat=".$row->rubrik."\">".$row->titel."</a> (".$row->number." ".$msgEntries.")<br />\n";
}
}
else {
$output .= "\t<b>".$err_noHeaders."</b><br />";
}
return $output;
} - function printThemes
function printThemes($category)
{
global $db, $sids, $msgEntries, $msgPage, $msgVoteFrom, $msgPages, $msgViews, $msgPrevious, $msgNext, $err_noArticles, $PMF_CONF, $LANG;
$seite = 1;
$output = "";
if (isset($_REQUEST["seite"])) {
$seite = $_REQUEST["seite"];
}
$numResult = $db->query("SELECT id FROM ".SQLPREFIX."faqdata WHERE active = 'yes' AND lang='$LANG' AND rubrik = '".$category."'");
$num = $db->num_rows($numResult);
$seiten = ceil($num / $PMF_CONF["numRecordsPage"]);
if ($seite == 1) {
$first = 0;
}
else {
$first = ($seite * $PMF_CONF["numRecordsPage"]) - $PMF_CONF["numRecordsPage"];
}
$result = $db->query("SELECT ".SQLPREFIX."faqdata.id, ".SQLPREFIX."faqdata.lang, ".SQLPREFIX."faqdata.thema, ".SQLPREFIX."faqdata.rubrik, ".SQLPREFIX."faqvisits.visits
FROM ".SQLPREFIX."faqdata LEFT JOIN ".SQLPREFIX."faqvisits ON ".SQLPREFIX."faqdata.id = ".SQLPREFIX."faqvisits.id AND ".SQLPREFIX."faqvisits.lang = ".SQLPREFIX."faqdata.lang
WHERE ".SQLPREFIX."faqdata.active = 'yes'
AND ".SQLPREFIX."faqdata.rubrik = '".$category."'
AND ".SQLPREFIX."faqdata.lang='$LANG'
ORDER BY ".SQLPREFIX."faqdata.id LIMIT ".$first.", ".$PMF_CONF["numRecordsPage"]);
$num = $db->num_rows($result);
if ($num > 0) {
if ($seiten > 1) {
$output .= "<p><b>".$msgPage.$seite." ".$msgVoteFrom." ".$seiten.$msgPages."</b></p>";
}
$output .= "<ul type=\"square\">\n";
while ($row = $db->fetch_object($result)) {
if (empty($row->visits)) {
$visits = "0";
}
else {
$visits = $row->visits;
}
$output .= "<li><a href=\"".$_SERVER["PHP_SELF"]."?".$sids."action=artikel&cat=".$row->rubrik."&id=".$row->id."&lang=".$row->lang."\">".stripslashes($row->thema)."</a> [".$row->lang."]<br><div class=\"little\">(".$visits." ".$msgViews.")</div></li>";
}
$output .= "</ul>\n";
}
else {
$output = $err_noArticles;
}
if ($seiten > 1) {
$output .= "<p align=\"center\"><b>";
$previous = $seite - 1;
$next = $seite + 1;
if ($previous != 0) {
$output .= "[ <a href=\"".$_SERVER["PHP_SELF"]."?".$sids."action=show&cat=".$category."&seite=".$previous."\">".$msgPrevious."</a> ]";
}
$output .= " ";
if ($next <= $seiten) {
$output .= "[ <a href=\"".$_SERVER["PHP_SELF"]."?".$sids."action=show&cat=".$category."&seite=".$next."\">".$msgNext."</a> ]";
}
$output .= "</b></p>";
}
return $output;
} - function generateTopTen
function generateTopTen()
{
global $db, $sids, $err_noTopTen, $msgViews, $LANG;
$result = $db->query("SELECT DISTINCT ".SQLPREFIX."faqdata.id, ".SQLPREFIX."faqdata.lang, ".SQLPREFIX."faqdata.thema, ".SQLPREFIX."faqdata.rubrik, ".SQLPREFIX."faqvisits.visits
FROM ".SQLPREFIX."faqvisits, ".SQLPREFIX."faqdata
WHERE ".SQLPREFIX."faqdata.id = ".SQLPREFIX."faqvisits.id
AND ".SQLPREFIX."faqdata.lang = ".SQLPREFIX."faqvisits.lang
AND ".SQLPREFIX."faqdata.active = 'yes'
AND ".SQLPREFIX."faqdata.lang = '$LANG' ORDER BY ".SQLPREFIX."faqvisits.visits DESC
LIMIT 0,10");
$output = "";
if ($db->num_rows($result) > 0) {
$i = 1;
while ($row = $db->fetch_object($result)) {
$output .= "<tr>\n\t<td class=\"topten\">\n";
$output .= "\t<b>[".$i.".] ".$row->visits." ".$msgViews.":</b><br /><a href=\"".$_SERVER["PHP_SELF"]."?".$sids."action=artikel&cat=".$row->rubrik."&id=".$row->id."&lang=".$row->lang."\">".stripslashes(makeShorterText($row->thema, 8))."</a>\n";
$output .= "\t</td>\n\t</tr>\n";
$i++;
}
}
else {
$output = "<tr><td class=\"topten\">".$err_noTopTen."</td></tr>";
}
return $output;
} - function generateFiveNewest
function generateFiveNewest()
{
global $db, $sids, $err_noTopTen, $msgViews, $LANG;
$result = $db->query("SELECT DISTINCT ".SQLPREFIX."faqdata.id, ".SQLPREFIX."faqdata.lang, ".SQLPREFIX."faqdata.rubrik, ".SQLPREFIX."faqdata.thema, ".SQLPREFIX."faqdata.datum, ".SQLPREFIX."faqvisits.visits
FROM ".SQLPREFIX."faqdata, ".SQLPREFIX."faqvisits
WHERE ".SQLPREFIX."faqdata.id = ".SQLPREFIX."faqvisits.id
AND ".SQLPREFIX."faqdata.lang = ".SQLPREFIX."faqvisits.lang
AND ".SQLPREFIX."faqdata.active = 'yes'
AND ".SQLPREFIX."faqdata.lang = '$LANG' ORDER BY ".SQLPREFIX."faqdata.datum desc LIMIT 0,5");
if ($num = $db->num_rows($result) > 0) {
$output = "";
while ($row = $db->fetch_object($result)) {
$output .= "\t\t<tr>\n";
$output .= "\t\t\t<td valign=\"top\" class=\"fivenewest\" nowrap>".makeDate($row->datum)."</td>\n";
$output .= "\t\t\t<td valign=\"top\" class=\"fivenewest\"><a href=\"".$_SERVER["PHP_SELF"]."?".$sids."action=artikel&cat=".$row->rubrik."&id=".$row->id."&lang=".$row->lang."\">".stripslashes(makeShorterText($row->thema, 8))."</a></td>\n";
$output .= "\t\t\t<td valign=\"top\" class=\"fivenewest\" nowrap>".$row->visits." ".$msgViews."</td>\n";
$output .= "\t\t</tr>\n";
}
}
else {
$output = "<tr class=\"fivenewest\"><td>".$err_noTopTen."</td></tr>";
}
return $output;
} - function searchEngine
function searchEngine($begriff)
{
global $db, $sids, $msgEntries, $msgPage, $msgPages, $msgPrevious, $msgNext, $err_noArticles, $msgSearchAmount, $msgSearchAmounts, $msgVoteFrom, $msgSearchContent, $PMF_CONF, $LANG;
$categories = getCategories();
$seite = "";
$output = "";
if (isset($_REQUEST["seite"])) {
$seite = $_REQUEST["seite"];
}
if (isset($_REQUEST["search"])) {
$begriff = $_REQUEST["search"];
}
$begriff = trim($begriff);
if (mysql_check("4.0.1") == FALSE) {
// Search with MySQL 3.23.23+
$query = "SELECT id, lang, rubrik, thema, content FROM ".SQLPREFIX."faqdata WHERE MATCH (thema,content,keywords) AGAINST ('".$begriff."') AND active = 'yes' AND lang='$LANG'";
}
else {
// Search with MySQL 4.0.1+
$query = "SELECT id, lang, rubrik, thema, content FROM ".SQLPREFIX."faqdata WHERE MATCH (thema,content,keywords) AGAINST ('".str_replace(" ", "* ", trim($begriff))."*' IN BOOLEAN MODE) AND active = 'yes' AND lang='$LANG'";
}
$result = $db->query($query);
$num = $db->num_rows($result);
$seiten = ceil($num / $PMF_CONF["numRecordsPage"]);
if (!$seite) {
$seite = 1;
}
$y = $seite * $PMF_CONF["numRecordsPage"];
$x = $y - $PMF_CONF["numRecordsPage"];
if ($y > $num) {
$y = $num;
}
$result = $db->query($query." LIMIT ".$x.",".$PMF_CONF["numRecordsPage"]);
if ($num > 0) {
if ($num == "1") {
$output .= "<p>".$num.$msgSearchAmount."</p>\n";
}
else {
$output .= "<p>".$num.$msgSearchAmounts."</p>\n";
}
if ($seiten > 1) {
$output .= "<p><b>".$msgPage.$seite." ".$msgVoteFrom." ".$seiten.$msgPages."</b></p>";
}
$output .= "<ul type=\"square\">\n";
for ($i = $x; $i < $y ; $i++) {
list($id, $lang, $rubrik, $thema, $content) = $db->fetch_row($result);
$rubriktext = $categories[$rubrik];
$thema = chopString($thema, 15);
$content = chopString($content, 25);
if ($PMF_CONF["ubbcode"]) {
$bbcode = new BBCode();
$content = $bbcode->parse($content);
}
else {
$content = stripslashes($content);
}
$thema = preg_replace('/(((href|src)="[^"]*)?'.$begriff.'(?(1).*"))/umies', "highlight_no_links(\"\\1\")", $thema);
$content = preg_replace('/(((href|src)="[^"]*)?'.$begriff.'(?(1).*"))/umies', "highlight_no_links(\"\\1\")", $content);
$output .= "<li><b>".$rubriktext."</b>: <a href=\"".$_SERVER["PHP_SELF"]."?".$sids."action=artikel&cat=".$rubrik."&id=".$id."&lang=".$lang."&highlight=".$begriff."\">".stripslashes($thema)."...</a><br><div style=\"font-size: 10px;\"><b>".$msgSearchContent."</b> ".stripslashes($content)."...</div><br /></li>\n";
}
$output .= "</ul>\n";
}
else {
$output = $err_noArticles;
}
if ($num > $PMF_CONF["numRecordsPage"]) {
$output .= "<p align=\"center\"><b>";
$vor = $seite - 1;
$next = $seite + 1;
if ($vor != 0) {
$output .= "[ <a href=\"".$_SERVER["PHP_SELF"]."?".$sids."action=search&&search=".$begriff."&seite=".$vor."\">".$msgPrevious."</a> ]";
}
$output .= " ";
if ($next <= $seiten) {
$output .= "[ <a href=\"".$_SERVER["PHP_SELF"]."?".$sids."action=search&search=".$begriff."&seite=".$next."\">".$msgNext."</a> ]";
}
$output .= "</b></p>";
}
return $output;
}
- function generateNumberOfArticles
- categories exist one language (i.e. category names are not translated).
- Open questions seem not to be related to one language
- Comments seem not to be related to one language
- I did not test the search feature yet
Ronan