leere Zellen von SQL nicht ausgeben

grazioli

Grünschnabel
Hallo,

ich habe schon diverses Versucht, aber immer ohne Erfolg!

Mein Problem liegt in der Struktur der default.php! Wenn ich in der Komponente, ein Feld leer lasse, und dies in meinem Modul aktiviere, dass es im Frontend angezeigt werden soll, bekomme ich eine leere Zeile!

Wie kann ich die default.php ändern, so dass ich auchdie leeren Zeilen rausbekomme?

Anbei drei Screeshots das Problem!

Die helper.php bringt die Einträge:
Code:
<?php // no direct access
defined('_JEXEC') or die('Restricted access');

class modTestHelper
{
    function getTest($menu_count = 5)
    {
        $db =& JFactory::getDBO();
        $query = 'SELECT * FROM `#__test` ORDER BY date, name, id DESC LIMIT '.$menu_count;

        $db->setQUery($query);
        $fpTest = $db->loadObjectList();
        return $fpTest;
    }
}
?>

Und in der default.php, werden die Daten angezeigt:
Code:
<?php // no direct access
defined('_JEXEC') or die('Restricted access');

JHTML::_('stylesheet', 'latest.css', 'modules/'.$module->module.'/assets/');

foreach ($display as $key => $val)
{
    if ($val == 1)
    {
        $outputs[] = $key;
    }

}

if (count($frontTest))
{
    if ($menuStyle == 'list')
    {
        foreach ($frontTest as $frontTest)
        {
            foreach ($outputs as $output)
            {
                if ($output == 'date' )
                {
                   
                    //$outData .= date('d. F Y', strtotime($frontTest->$output)).' &nbsp; ';
                    echo JHTML::date($frontTest->$output, '%d. %B %Y ').' &nbsp; ';
                }
                else
                {
                    echo $frontTest->$output.' &nbsp; ';
                }
            }
            echo '<a href="'.JRoute::_('index.php?option=com_Test&mid='.$frontTest->id).'">mehr ...</a> <br />';
        }
    }
    else
    {
        echo '<table id="modTest" border=0 cellpadding=0 cellspacing=0>';
        echo'<tr>';
        foreach ($outputs as $output)
        {
            echo '<th>'.$title[$output].'</th>';
        }
        echo '<th>&nbsp;</th>';
        echo '</tr>';
        foreach ($frontTest as $frontTest)
        {
            echo '<tr>';
            foreach ($outputs as $output)
            {
                if ($output == 'alarmdate' || $output == 'recurrencedate')
                {
                    echo '<td>'.date('d. F Y', strtotime($frontTest->$output)).'</td></tr>';
                }
                else
                {
                    echo '<td>'.$frontTest->$output.'</td>';
                }
            }
            echo '<td> <a href="'.JRoute::_('index.php?option=com_Test&mid='.$frontTest->id).'">mehr ...</a> </td>';
            echo '</tr>';
        }
        echo '</table>';
    }
}
else
{
    echo $menuNone;
}
?>

Ich bin dankbar für Ihre Hilfe!
 

Anhänge

  • ScreenShot002.jpg
    ScreenShot002.jpg
    7,5 KB · Aufrufe: 40
  • screenshot2.jpg
    screenshot2.jpg
    4,4 KB · Aufrufe: 401
  • screenshot1.jpg
    screenshot1.jpg
    2,9 KB · Aufrufe: 400
Prüfe einfach in der Schleife ob der aktuelle Wert leer ist.
Falls ja, gib keine Tabellenzeile aus.
 
Hallo,

muss ich das empty für jedes Feld in einer Zeile separat ausführen?

Und wo würdet Ihr dies am besten einfügen?

Danke
 
Hallo,

und erstmal Danke für Eure Hilfe.

Nach durchlesen von dieversen Beiträge im Netz über Google (dein Freund und Helfer), habe ich auf verschiedene Weise jetzt versucht, in der helper.php das empty einzusetzen! Auch unter http://de.php.net/ suchte und lies ich duiverses.

Leoider erhalte ich immer parse error, egal wo ich mein Glück versuchte!

:confused: ich weis nicht weiter :confused:

Danke für Eure Hilfe!
Gruss Grazioli
 
Ich vermute das du hier die Prüfung einbauen musst.
PHP:
else
{
  echo '<td>'.$frontTest->$output.'</td>';
}
Das muss dann einfach wie folgt abgeändert werden:
PHP:
elseif ( !empty( $frontTest->$output ) )
{
  echo '<td>'.$frontTest->$output.'</td>';
}
 
Hallo

und Danke für Die Antwort!

Meine Probleme kommen alle vom else (in der mitte des Codes) abwärts!
Code:
	else
	{
		echo '<table id="modTest" border=0 cellpadding=0 cellspacing=0>';

		foreach ($frontTest as $frontTest)
		{
			echo '<tr>';
			foreach ($outputs as $output)
			{
				if ($output == 'alarmdate')
				{
					echo '<td>'.date('d. F Y', strtotime($output == 'alarmdate')).'</td>';
				}
			echo '</tr>';
					
					echo '<tr>';
					echo '<td>'.$frontTest->$output.'</td>';
					echo '</tr>';
					
			}
			echo '<tr>';
			echo '<td> <a href="'.JRoute::_('index.php?option=com_Test&mid='.$frontTest>missionid).'">mehr ...</a> <br /></td>';
			echo '</tr>';
		}
		echo '</table>';

  • ein Datum anzeigt, das ich niergends in den Tabellen fand! 1. Januar 1970 steht dort?

  • es mir jetzt das Datum 0000-00-00 (wie es in der DB gespeichert wird) angezeigt
Dies habe ich schon mit empty versucht, aber geht leider nicht!

  • Datum wird Englisch dargestellt!
Habe ich auch schon mit diversen änderungenm und Datumsformate versucht. Auch dies bringe ich nicht hin!

Bitte nochmals um Hilfe!!

Gruss Grazioli
 

Anhänge

  • ScreenShot002.jpg
    ScreenShot002.jpg
    4,3 KB · Aufrufe: 550
Hi!

Erstmal macht
Code:
foreach ($frontTest as $frontTest)
keinen Sinn, Du überschreibst ein Array mit dem
ersten Inhalts dieses Arrays!


Weiter... das hier:
Code:
date('d. F Y', strtotime($output == 'alarmdate'))
kann nicht stimmen.

$output == 'alarmdate' vergleicht die beiden Werte miteinander, und kann nur true oder false zurück-

Und das nimmst Du in die Funktion strtotime.... Diese Funktion sollte aber bereits einen String im englischen Zeitformat bekommen.
Hier wird also einfach 0 in eine Zeit umgewandelt, das ist der 1.1.1970 in der Computerzeitrechnung (UNIX TIMESTAMP = 0)

Daraus machst Du mit date also dann d. F Y, was 1. Januar 1970 wird.

Du hast das bei einer Vorversion glaub ich schon richtig gemacht:
Code:
date('d. F Y', strtotime($frontTest->$output))
Wobei Du ja eben hier nicht $frontTest nehmen solltest, sondern eine andere Variable, die Du beim foreach vergibst.

Ich hab mir das gesamte Zauberwerk noch ned angesehen, aber Du fragst ab, ob etwas =='alarmdate' ist....

Ich denke, das könnte so gehen (das fett geschriebene ist anders als bei Deinem Code)
Code:
else
	{
		echo '<table id="modTest" border=0 cellpadding=0 cellspacing=0>';

		foreach ($frontTest as $singlefrontTest)
		{
			echo '<tr>';
			foreach ($outputs as $output)
			{
				if ($output == 'alarmdate')
				{
					echo '<td>'.date('d. F Y', strtotime($singlefrontTest->$output)).'</td>';
				}
			echo '</tr>';
					
					echo '<tr>';
					echo '<td>'.$singlefrontTest->$output.'</td>';
					echo '</tr>';
					
			}
			echo '<tr>';
			echo '<td> <a href="'.JRoute::_('index.php?option=com_Test&mid='.$singlefrontTest>missionid).'">mehr ...</a> <br /></td>';
			echo '</tr>';
		}
		echo '</table>';

WIe gesagt, hab nicht alles gesehen, das ist nur das was
mir auf die Schnelle aufgefallen ist.

Hoffe geholfen zu haben!

Greetz
w00dy / Christian Holzmann
 
Hallo,

Und danke für die Antwort!

Mein einziges Problem liegt noch am Doppelten Datum!
  • 08. Januar 2007
  • 2007-01-08

Das unterstrichene Benötige ich, aber da andere leider nicht!

Wie könnte ich jetzt realisieren?

Gruss Grazioli
 

Anhänge

  • ScreenShot002.jpg
    ScreenShot002.jpg
    2,9 KB · Aufrufe: 519
Zuletzt bearbeitet:
Hallo,

alle Probleme konnte ich lösen, bis auf mein count Problem!

In der xml kann ich den Count mit einer Zahl definieren, die mir danach nur soviele Beiträge anzeigt, wi ich dies in der xml eingetragen habe!

Im ersten Beitrag unter helper.php habe ich den count angegeben.
Code:
function getTest($menu_count = 5)
In der default.php so:
Code:
if (count($frontTest))
und in der xml so:
Code:
<param name="count" type="text" default="5" label="Anzahl Beiträge auf der Startseite" description="Anzahl Beiträge auf der Startseite" />
und in der mod_test.php so:
Code:
$menuCount = $params->get('menu_count', '5');
$menuNone = $params->get('menu_none', 'No Missionmanagement Found');
..........
........
$frontMissionmanagement = modMissionmanagementHelper::getMissionmanagement($menuCount);

Habe ich irgendwo einen Denkfehler?

Gruss Grazioli
 
Zurück