Konsekwencje złego planowania

Data: 2016-03-04, autor: Michał Misztal

No i sprawa się rypła. A wszystko przez "a poprawi się później". Ja wiem, że się nie poprawi. Później będzie tylko gorzej. Niedawno poprawiałem to i owo na stronie (widać zmiany) i czepiłem się sekcji "Muzyka na dziś". W zasadzie to czegoś takiego miało tutaj nie być. Powstało przypadkiem i zostało. Problem jest w sposobie wklejania kodu filmiku na stronę. Otóż sekcja "Muzyka na dziś" to nie jest kolejna klasa ale zwykły (tak, niech przełknę te gorzkie słowa) artykuł z iframe Youtube'a, czyli wygląda to tak



<div class="muzyka">
<iframe width="640" height="360" src="https://www.youtube.com/embed/Ra1TSmmUY90?rel=0" frameborder="0" allowfullscreen></iframe>
</div>

Ble, paskudztwo. Zwykłe artykuły można tak pisać. Do tego uświadomiłem sobie, że nie mam żadnych (!) korzyści z takiego formatu. Nico. Chciałem dodać fikuśne linki do ostatnich filmików w aside (czyli po prawej) ale nie da się. Fakt, mógłbym napisać funkcję która wyłuska identyfikator youtuba z artykułu ale to nieergonomiczne i nieładne. Poza tym zwalidujcie stronę z iframe'ami z Youtube. I co? No, niezbyt pięknie to wygląda. Wypadałoby chociaż skasować formatowanie html'a.

Żeby ratować sytuację dodałem kolumnę do tabeli z artykułami (teraz sobie myślę, że powinienem dodać również i kategorie) o nazwie tajemniczej "yt_id". W kolumnie tej znajdować się będą identyfikatory filmu z Youtube. Zasada działania jest prosta. Na podstawie identyfikatora tworzony jest iframe do filmu + miniatura filmu. I volia. Wszystko powinno działać jak trzeba. Zresztą działa.

W końcu doszło do tego, że całkowicie przerobiłem kod przetwarzający sekcję muzyki. Poprzednio miałem jedno okienko na treść i w nim lądował iframe filmu i podpis. Teraz mam to wyodrębnione a całość do kupy składa PHP. Wkleję może fragment kodu generującego artykuł



public function wyswietl_Artykul(){
    $tmp=new PlikiDoPobrania($this->aDane['tresc']);
    $tmp->utworz();
    $this->aDane['tresc']=$tmp->zamienTresc();
    $tmpLinki=new LinkiPodArtykulem($this->aDane['tresc']);
    $tmpLinki->utworz();
    $this->aDane['tresc']=$tmpLinki->zamienTresc();
    $data=  dataMiesiacSlownie($this->aDane['data']);
    echo "<div data-art-id='".$this->aDane['id']."' class='artykul'>";
    echo "<a href='".STRONA.$this->aDane['alias']."'>";
    echo "<h1 class='tytul'>".$this->aDane['tytul']."</h1></a>";
    new DivClear;
    $this->wstawLogoKategorii();
    if((strpos($this->aDane['tagi'],'muzyka')>0)||(strpos($this->aDane['tagi'],'muzyka')===0)) $this->formatujMuzykaNaDzis();
    echo "<div class='tresc'>".$this->aDane['tresc'];
    new DivClear;
    new Tagi($this->aDane['tagi']);
    echo "<div class='data'>";
    echo "Dodane w dniu $data przez ".$this->aDane['autor'];
    if(!stristr($this->aDane['tagi'], 'muzyk')){
        echo "<br>Kopiowanie powyższych wypocin dozwolone pod warunkiem podania źródła, znaczy tandemu autor + link do strony";
    }
    echo "</div></div>";
    echo "</div>";
}

Jak widzimy przed umieszczeniem muzyki na stronie całość jest formatowana. Funkcja formatujMuzykaNaDzis wyglada tak



public function formatujMuzykaNaDzis(){
    echo '<div class="muzyka">';
    $Y=new Youtube;
    echo $Y->mPrefix.$this->aDane['yt_id'].$Y->mSuffix;
    echo '</div>';
}

Dane pobierane są z obiektu klasy Youtube ktory ma na sztywno wbite cechy i służy jako dawca. Dzięki takiemu rozwiązaniu mam większą kontrolę nad kodem. Po pierwsze drobna zmiana nie wymaga edycji wszystkich wpisów, po drugie tak jest dużo ładniej. Tak wiem - publiczne cechy = ble, ale kodem zarządzam tylko ja więc mogę sobie pozwolić.

To rozwiązało sporo moich kłopotów. I jeżeli chodzi o filmy to pozostała mi tylko edycja wpisów muzyki by wywalić iframe'y. Jeszce tylko napomknę o okienku z losową muzyką po prawej. Dzięki posiadaniu identyfikatora możliwym się ono stało. Kod który mi to robi z automatu



public function asideLosowaMuzyka($ilosc){
    $licznik=0;
    $Y=new Youtube;
    $sql="SELECT `tytul`,`alias`,`yt_id` FROM `artykuly` WHERE `tagi` LIKE '%muzyka%' ORDER BY RAND() DESC LIMIT ".$ilosc;
    try {
        $pdo=new PDO('mysql:host='.HOST.';dbname='.DB_NAME,DB_GUEST, DB_PASSWORD_GUEST );
        $result=$pdo->query($sql);
        while($row=$result->fetch()){
            echo '<div>';
            echo '<a href="'.ROOT.$row['alias'].'">';
            echo '<img src="'.$Y->fPrefix.$row['yt_id'].$Y->fSuffix.'" title="'.$row['tytul'].'" alt="'.$row['tytul'].'">';
            echo '</a>';
            echo '</div>';
            $licznik++;
        }
        $result->closeCursor();
    } catch (PDOException $ex) {
        echo 'Błąd połączenia ' . $ex->getMessage();
    }
    return $licznik;
}

Przyznaję się bez bicia, że na cześć tego artykułu trochę posprzątałem w kodzie.

Troszkę mi to zajęło, dłużej niż zwykle bo pogoda szarobura i na rowerze nie można pojeździć a jak każdy wie najlepsze pomysły wpadają podczas wycieczek rowerowych. Cóż, wiedziałem, że do tego dojdzie. Po prostu wiedziałem. Ale gdy doszło to jakoś tak nie dowierzałem.

Komentarze (1)

[2016-03-06 18:13:34] gość pisze:
Halo. Tutaj admin. Test komentarzy. A w zasadzie to i do wpisu się odniosę. Metoda wyswietlArtykul() już nie wygląda tak jak powyżej. Dodałem do tego obsługę komentarzy a i po przeróbce strony głównej jej się dostało. To chyba tyle jeśli chodzi o test. Tylko treść jest obowiązkowa (zaraz to poprawię uwydatnię w jakiś sposób). W przypadku braku imienia zostanie zmienione na gość. Teraz test czasu, na localhoście wszystko gra. Zobaczymy czy trzeba będzie przerabiać datę wpisu. Normalnie jest generowana via timestamp.

Skomentuj lub zgłoś błąd

© Michał Misztal 2023