php.de

Zurück   php.de > Webentwicklung > Software-Design

Software-Design Diskussionen auf Profi-Niveau: PHP Lösungen auf konzeptioneller Ebene

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 30.05.2010, 16:14  
Erfahrener Benutzer
 
Registriert seit: 10.02.2009
Beiträge: 929
ragtek ist ein sehr geschätzer Menschragtek ist ein sehr geschätzer Menschragtek ist ein sehr geschätzer Menschragtek ist ein sehr geschätzer Mensch
Standard [Erledigt] Eine "Ausgabeklasse" so flexibel wie möglich machen

Ich habe eine Klasse erstellt, die mir Artikel aus einem Shop anzeigt.
Mein Problem ist nun, dass diese ziemlich unflexibel ist.
Im Moment hat diese nur 2 "Verwendungsmöglichkeiten" =>neueste & spezial Artikel anzeigen

Meine 1. Überlegung war, dass ich es für den Benutzer so einfach wie möglich mache und dieser einfach eine der 2 show Methoden aufzurufen braucht.

Mit der Zeit werden hier aber noch xxx neue Ausgaben dazukommen.

Jetzt ist es doch Schwachsinn das ich für jede neue MÖglichkeit 2 neue Methoden (showXXX und fetchQueryXXX) erstelle und den Switch Teil in der fetchItems Methode anpassen.

Was wäre hier nun die eleganteste Möglichkeit?

PHP-Code:

<?php

// change 27.3 : vb registry entfernt
// da die klasse soweit ich das merke keine vb Registry benögtigt, wurde sie ausgebaut
//

namespace ragtekvbulletoscommerce;

class 
widget
{
    
// oscommerce db connection
    
private $osdb;
    
// saves if we want to show newest or special articles
    
private $called;

    private 
$queryresult;
    

    public function  
__construct(vB_Database $osdb null)
    {
            
$this->osdb $osdb;
    }

    public function 
showNewest($counter 5$show true)
    {
        
$this->fetchItems('new'$counter);
        if (
$show == true)
        {
            return 
$this->generateOutput();
        }
        else
        {
            return 
$this->queryresult;
        }
    }

    
/**
     * return the special x items or the parsed template with them
     * @param <int> how many items should be fetched
     * @param <bool> parse the template? 
     * @return <mixed >
     */
    
public function showSpecial($counter 5$show true)
    {
        
$this->fetchItems('special'$counter);
        if (
$show == true)
        {
            return 
$this->generateOutput();
        }
        else
        {
            return 
$this->queryresult;
        }
    }

    
/**
     *
     * @param <int> $counter
     * @return <string> query
     */
    
private function fetchNewestQuery($counter)
    {
        
$query "xx";
        return 
$query;
    }

    
/**
     *
     * @param <int> $counter
     * @return <string> query
     */
    
private function fetchSpecialQuery($counter)
    {
        
$query "xx";
        return 
$query;
    }


    
/**
     * fetch items from the database and save them into $this->queryresult
     * @param <type> what should be fetched ? special, new
     * @param <type> how many items should be fetched?
     * @return <array> $this->queryresult
     */
    
protected function fetchItems($what$counter){
        
$this->called $what;

        switch (
$what) {
            case 
'special':
                
$query $this->fetchSpecialQuery($counter);
                break;
            case 
'new':
                
$query $this->fetchNewestQuery($counter);
                break;
            default:
                throw new 
Exception('Keine gültige Aktion ausgewählt'); // über phrase lösen
                #throw new Exception($vbphrase['no_valid_action']);
        
}
        
$articles $this->odb->query($query);
        while (
$article $this->odb->fetch_array($articles) )
        {
                    
$this->queryresult["$article[products_id]"] = $article[];
        }
        
$this->odb->free_result();
        return 
$this->queryresult;
    }

    private function 
generateOutput()
    {
        if (
count($this->queryresult) == 0)
        {
            
// todo hier auch noch etwas einfallen lassen für die ausgabe. eventuell phrase
            
return '0';
        }
        
$output '';
        foreach (
$this->queryresult as $article) {
               
$article['price'] = number_format($article['products_price'], 2);
               if (
$this->called == 'special')
               {
                  
$article['new_price'] = number_format($article['specials_new_products_price'], 2);
               }
               
$templater vB_Template::create('oscommerce_product');
                    
$templater->register('article'$article);
                    
$templater->register('g'$templateglobals);
               
$output .= $templater->render();
        }
        return 
$output;
    }
}

Geändert von ragtek (30.05.2010 um 16:18 Uhr).
ragtek ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 30.05.2010, 16:26  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.994
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

IMHO das Injecten eines spezialisierten View-Objektes pro Ansicht.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online   Mit Zitat antworten
Alt 30.05.2010, 16:46  
Erfahrener Benutzer
 
Registriert seit: 10.02.2009
Beiträge: 929
ragtek ist ein sehr geschätzer Menschragtek ist ein sehr geschätzer Menschragtek ist ein sehr geschätzer Menschragtek ist ein sehr geschätzer Mensch
Standard

Hm, was meinst du mit View Objekt?

Soweit ich mir das jetzt zamreime wäre es folgendes:
Pseudocode
PHP-Code:
class specialArticle {
function 
query { return 'xxx'; }
..
}
class 
newArticle {
function 
query { return 'xx'; }
}

$articles = new specialArticle();
$widget = new widget($articles); 
Meinst du so etwas?

MIr ist noch etwas gerade eingefallen.
1. Abstrakte Artikelklasse
2. die einzelnen Ausgaben erben von der Artikelklasse und erweitern diese nur um den query und eine Konstante damit man für die Ausgabe weiß, was jetzt verwenden wird
ragtek ist offline   Mit Zitat antworten
Alt 30.05.2010, 16:48  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.994
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Bitte mach das nicht! Es fängt schon damit an, dass die Query vielleicht mal verschiedene Parameter als Eingabe benötigt. Schon bekommst Du Probleme, weil Deine Methoden unterschiedliche Schnittstellen bekommen.

Beschreib doch mal, wie das für den Endnutzer später aussehen soll.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online   Mit Zitat antworten
Alt 30.05.2010, 17:00  
Erfahrener Benutzer
 
Registriert seit: 10.02.2009
Beiträge: 929
ragtek ist ein sehr geschätzer Menschragtek ist ein sehr geschätzer Menschragtek ist ein sehr geschätzer Menschragtek ist ein sehr geschätzer Mensch
Standard

Naja der Endbenutzer hat im Moment ein "Feld" (Textarea) wo er den Code manuell einfügen muss.

Aufruf im Moment:
PHP-Code:
$widget = new widget($shopdb);
$output $widget->showNewest(10);
unset(
$widget); 
PHP-Code:
$widget = new widget($shopdb);
$output $widget->showSpecial();
unset(
$widget); 
usw


Später soll das dann über eine schöne Oberfläche gehandhabt werden.
Damit man sichs vorstellen kann, so in etwa:
Das heißt, die Werte aus dem Formular werden in einem Config Array gespeichert und dazu habe ich mir überlegt eine Factory Klasse zu erstellen, die den Rest dann handhabt.
Das heißt, in einem späteren Refactoring Vorgang werden die einzelnen Methoden showXX sowieso unnötig, da der Klassenaufruf dann automatisch geschiet und kein Code manuell irgendwo eingegeben werden muss.

Momentan brauche ich die einzelnen Methoden aber als Wrapper.
Hoffe man versteht was ich meine.

Geändert von ragtek (30.05.2010 um 17:11 Uhr).
ragtek ist offline   Mit Zitat antworten
Alt 30.05.2010, 17:18  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.994
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Dann vielleicht in der Art:

PHP-Code:

interface WidgetDAO 
  
{
  function 
fetchQuery (...);
  }

class 
widgetDAO_showNewest implements WidgetDAO 
  
{
  ...
  }

class 
widget 
  
{
  function 
__construct (WidgetDAO $dao)
    {
    
$this->view = new widgetView ($dao);
    }

  function 
getView ()
    {
    return (
$this->view);
    }
  }

switch (...) {
  case ...:
    
$type 'showNewest';
    
$settings = array ('size' => 10 , ...);
    break;
  ...
}

$dao DAOFactory::create ($type $settings $shopdb);

$widget = new widget($dao);
$view   $widget->getView();
$view->render();

unset(
$widget); 
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
ist es möglich, <INPUT ...> variabel zu gestalten dieter26 PHP Tipps 2010 14 16.01.2010 22:29
Frage.: Dymanisches Datum im Drop Down Menü möglich? badboygoofy JavaScript, Ajax und mehr 1 24.07.2009 14:34
"OR-Abfrage" in Mysql möglich? Timer Datenbanken 2 27.05.2009 10:30
[Erledigt] Automatischer Seiten Aufruf via PHP vom Server Möglich? wind-kun PHP Tipps 2009 3 23.04.2009 14:59
nur Formular aktualiseren möglich? sensimillia JavaScript, Ajax und mehr 4 23.01.2009 20:22
login über internet explorer nicht möglich Pitbull1982 PHP Tipps 2009 2 19.01.2009 21:16
Ist Include PDO mysql Library möglich? robert PHP Tipps 2009 1 09.01.2009 20:56
2 Tabellen in einer Abfrage möglich? noOx Datenbanken 5 16.12.2008 20:16
[Erledigt] Ist dies mit PHP möglich ? Kleine Anfängerfragen. Nico.Engel PHP Tipps 2008 5 24.11.2008 21:56
[Erledigt] Vererbung - Zugriff auf Elternmethoden nicht möglich unimow PHP Tipps 2008 5 03.11.2008 18:53
Bestellformular-Ist es möglich ? hektor1 PHP Tipps 2008 4 27.02.2008 12:39
Variable Anzahl Spalten im Ergebniss möglich? Datenbanken 4 21.07.2005 13:19
Möglich, Daten zweier Tabellen zusammenrechnen? duerov PHP Tipps 2004 1 08.10.2004 08:57
mehrere gleichnamige DIVs möglich? HTML, Usability und Barrierefreiheit 6 26.08.2004 11:56
kein Direktlink... möglich? PHP Tipps 2004 5 27.07.2004 11:36

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
unsetwidget, ein widgets counter der die registrierten benutzer anzeigt

Alle Zeitangaben in WEZ +2. Es ist jetzt 00:39 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum