gwypych

Reputacja

727

Głosów ogółem

użytkownik głosował za tyle razy
28
Użytkownik głosował przeciw tyle razy
5
  • Roczniak
Prawdziwe imię
Grzegorz
Członek od
2 lata, 2 miesiące
Ostatnio widziany
2 miesiące, 1 tydzień temu
Witryna
http://www.smi....
Miejscowość
śląsk
Wiek
32

O mnie

Programista, projektant, analityk

Pytania: 1

Odpowiedzi: 55

  • 2010-03-13 23:04:58 Licznik w SMARTY

    W najprostszej wersji można to zrobić tak:

    {section name=cats loop=$categories->name}
        <table class="categories"> 
            <tr>
                {assign var="counter" value=0}
                {section name=sys loop=$systems->id}
                    {if $systems->category[sys] == $categories->id[cats]}
                         {assign var="counter" value=$counter+1}
                         <td>
                             {$systems->name}
                         </td>
                    {/if}
                    {if $counter % 5 == 0 && $counter != 0} </tr><tr> {/if}
                {/section}
            <tr>
        </table>
    {/section}
    

    Do tego warto jeszcze uzupełnić brakujące komórki po zakończeniu iteracji z licznikiem $counter

  • 2010-03-29 13:15:29 PHP: jak odwrócić działanie mysql_real_escape_string

    Podana funkcja ma na celu zabezpieczenie danych wejściowych, które są następnie przekazywane do bazy. Jest to jedna z metod zapobiegania SQLInjection. Chodzi o zestaw znaków: \x00, \n, \r, \*, *', " oraz \x1a, które mogą wpłynąć na zapytanie.

    Przykładowo wstawiamy do bazy:

    INSERT INTO table (field_1, field_2) VALUES ('tekst z apostrofem', 'can't');
    

    Apostrof jak widać nawet w formatowaniu kodu powoduje błędy kolorystyczne. Natomiast na poziomie bazy danych spowoduje wysypanie zapytania. Dlatego należy zastosować funkcję mysql_real_escape_string. Wówczas apostrof zapisze się poprawnie.

    W manualu (przykład drugi) funkcja wykorzystana jest do zabezpieczenia mechanizmu logowania. Jeśli dane nie zostały by w ten sposób uprzednio przygotowane to znając tylko login użytkownika zawsze dostaniemy się do serwisu.

    Nie ma potrzeby stosowania funkcji przeciwnej ponieważ funkcja nie modyfikuje danych wstawianych do bazy. W bazie dane są w formacie pożądanym. Funkcja przeciwna z tej to przyczyny nie istnieje.

  • 2010-05-05 12:04:21 Jak wprowadzić dane z pliku w cpp ?

    Pod bashem kiedyś działało coś takiego:

    cat plik.txt | ./a.out
    

  • 2010-10-12 22:48:05 Parametry GET w Java Script.

    JS udostępnia obiekt do manipulacji adresem URL. Następnie wystarczy połączyć go z metodami obiektu String, np tak:

    document.location.href.indexOf('czego szukasz');
    

    Ewentualnie można przygotować parser do argumentów, który rozbije URL na tablicę z parametrami. Prosta funkcja parsująca URL może wyglądać tak:

    function getUrlParams() {
        var params = [], hash;
        var hashes = window.location.search.slice(1).split('&');
        for(var i = 0; i < hashes.length; i++) {
            hash = hashes[i].split('=');
            params.push(hash[0]);
            params[hash[0]] = hash[1];
        }
        return params;
    }
    

  • 2010-03-11 13:35:16 Przeniesienie części stringa z końca na początek

    Na szybko wygląda to tak:

    $result = preg_replace( $pattern, $replace, $subject );
    

    gdzie:

    $pattern = "/^(.+) (gm\.|ok\.|okol\.)$/";
    $replace = "\\2 \\1";
    $subject = array(
                    "Koluszki gm.",
                    "gm. Koluszki",
                    "Oborniki ok."
                    );
    

    Wzorzec może przyjąć również inną postać

    $pattern = array(
                    "/^(.+) (gm\.)$/",
                    "/^(.+) (ok\.)$/",
                    "/^(.+) (okol\.)$/",
                    );
    

    lub zbudować zgodnie z tym co przedstawił newton

  • 2010-03-12 23:01:38 jQuery dodawanie linku do obrazu (Pikachoose)

    Rozwiązanie jest stosunkowo proste ale warto je skonsultować z grafikiem zawodowym. Konieczne jest powtórzenie grafiki w odnośniku i parę modyfikacji styli (ukrycie klasy pika_subdiv oraz zmiana pozycjonowania dla klasy pika_caption)

    Po krótkiej analizie wychodzi mi coś takiego:

    <li>
      <img src="img/1.jpg"/>
      <span>
        <a href="http://onyxclub.pl">
          <img src="img/1.jpg"/>
          Nowoczesny klub muzyczny, wygodny, ...
        </a>
      </span>
    </li>
    

    Grafikę należy powtórzyć w znaczniku <span> i <a>. Dodatkowo w stylach konieczna jest mała przebudowa

    .pika_subdiv{position:relative;padding:2px;display:none;}
    .pika_subdiv img, .pika_subdiv a img{border:none;}
    .pika_caption{padding:2px;text-align:center;position:absolute;top:2px;left:2px;background:url('../images/black.png') top left;}
    .pika_caption a{color:red; text-decoration:none;}
    

    Lokalnie pojawiła się u mnie czerwona ramka ale to kwestia sprawdzenia styli i jej zlikwidowania.

    Można się jeszcze pobawić z samą konfiguracją pica aby wcześniej wyświetlał opis. Opcja powinna być dostępna.


    od rzientek: co do ramki czerwonej to ustawiłem dla wszystkich obrazów styl:

    img {
        border:none;
    }
    

    i działa :]

  • 2010-03-14 18:17:57 Przewijanie bez jQuery

    Kiedyś popełniłem coś takiego:

    <script type="text/javascript">
    var panelBody = document.getElementById('Nowosci');
    var docBody = document.getElementById('Nowosci_Panel');
    var scrollBody = document.getElementById('Nowosci_Scroll');
    var boxWidth = 190;
    var h_speed = 10;
    
    function HMarquee()
    {
        if( docBody.scrollLeft >= ( parseInt( scrollBody.style.width ) - boxWidth ) ) {
            docBody.scrollLeft = 0;
        }
        docBody.scrollLeft = docBody.scrollLeft + 1;
    }
    
    var h_mar = setInterval( HMarquee, h_speed );
    panelBody.onmouseover = function() {
        clearInterval( h_mar );
    }
    panelBody.onmouseout = function() {
        h_mar = setInterval( HMarquee, h_speed );
    }
    </script>
    

    Do tego HTML

    <div id="Nowosci">
        <div id="Nowosci_Panel">
            <div id="Nowosci_Scroll" style="width: (wylicz dynamicznie)px;">
                jakiś tekst do przewijania
            </div>
        </div>
    </div>
    

    i CSS

    #Nowosci_Panel { overflow: hidden; width: (boxWidth)px; }
    #Nowosci_Scroll { overflow: hidden; padding-right: (boxWidth)px; }
    

    Szerokość dla #NowosciScroll trzeba wyliczyć dynamicznie. Nie sprawdzałem obecnie co się stanie jeśli nie zostanie on ustawiony, ponieważ przedstawione rozwiązanie jest większym wycinkiem całości.

    W moim wypadku chodziło o rotator produktów ze stop klatką na każdym produkcie. Jak do tej pory klient zgłaszał poprawek do tego mechanizmu więc spełnia wymagania. Skrypt działa już 3 lata.

  • 2010-05-06 23:00:51 Smarty, rozdzielenie loopa

    Ponieważ nie przepadam osobiście za sekcjami przedstawię rozwiązanie w foreach.

    {foreach from=$newses item="news" name="list"}
      {if $smarty.foreach.list.first}
        <div id="glowny_wpis">
          <li class="news" >
            {if $news.is_image}
              <a href="newses/{$news.id}/{$news.url_text}"><img is="news-0_img" src="images/newsy/m_{$news.id}.jpg" alt="{$news.url_text}" /></a>
            {/if}
            <h2><a href="newses/{$news.id}/{$news.url_text}">{$news.title}</a></h2>
            {$news.short_content}
          </li>
        </div>
        <div id="glowny_bottom"></div>
        <div id="poboczne">
      {else}
        <li class="news-poboczny" >
          {if $newses[a].is_image}
            <a href="newses/{$news.id}/{$news.url_text}"><img is="news-0_img" src="images/newsy/m_{$news.id}.jpg" alt="{$news.url_text}" /></a>
          {/if}
          <h2><a href="newses/{$news.id}/{$news.url_text}">{$news.title}</a></h2>
          {$news.short_content}</li>
      {/if}
      {if $smarty.foreach.list.last}
        </div>
        <div id="poboczne_bottom"></div>
      {/if}
    {/foreach}
    

    Analogicznie można przygotować rozwiązanie w oparciu o section.

  • 2010-05-06 23:15:33 Smarty, rozdzielenie loopa

    Na podstawie komentarza do Manveru przyszło mi do głowy drugie rozwiązanie.

    <div id="glowny_wpis">
    {if $newses|count > 0}
      <li class="news" >
      {if $newses.0.is_image}
        <a href="newses/{$newses.0.id}/{$newses.0.url_text}"><img is="news-0_img" src="images/newsy/m_{$newses.0.id}.jpg" alt="{$newses.0.url_text}" /></a>
      {/if}
      <h2><a href="newses/{$newses.0.id}/{$newses.0.url_text}">{$newses.0.title}</a></h2>
      {$newses.0.short_content}</li>
      </div>
      <div id="glowny_bottom"></div>
      {if $newses|count > 1}
        <div id="poboczne">
        {section name=a loop=$newses start=1}
          <li class="news-poboczny" >
            {if $newses[a].is_image}
              <a href="newses/{$newses[a].id}/{$newses[a].url_text}"><img is="news-0_img" src="images/newsy/m_{$newses[a].id}.jpg" alt="{$newses[a].url_text}" /></a>
            {/if}
            <h2><a href="newses/{$newses[a].id}/{$newses[a].url_text}">{$newses[a].title}</a></h2>
            {$newses[a].short_content}
          </li>
        {/section}
        </div>
        <div id="poboczne_bottom"></div>
      {/if}
    {/if}
    </div>
    

    To co nie działało powyżej to

    1. niekonsekwencja w sekcjach. W drugiej sekcji o nazwie b iterujesz po elementach tablicy kluczem a.
    2. po co iterować po całej tablicy kiedy najpierw potrzebujesz jeden element, a potem wszystkie bez pierwszego. section ma taki parametr jak start, którym można przesunąć wyniki.
    3. zarówno section jak i foreach mają parametry do iteracji po elementach takie jak: first, last, index i iteration, które można spokojnie wykorzystać zamiast licznika.

    Kolejnym problemem jaki widzę to kod html. Walidator na 100% zgłosi błędy. Jeden to brak ul nad li.

  • 2010-05-10 22:37:39 Lista newsów się nie układa

    Potrzebujesz jeszcze określić szerokość w css dla znacznika li. Jeśli tego nie określisz to na podstawie własności display=block znacznik jest rozciągany na całą szerokość.

    Wynikowo css powinien wyglądać mniej więcej tak:

    #poboczne {
        display: block;
        width:600px;
    }
    
    #poboczne ul{
        list-style: none;
    }
    
    li.news-poboczny {
        display: block;
        float: left;
        width: 150px;
    }
    

    Z takiego kodu uzyskasz 4 elementy obok siebie. Należy jeszcze zwrócić uwagę na pozostałe style aby marginesy nie powodowały zaburzeń w widoku (ale to już kosmetyka)

Tagi: 2