Архивы по Категориям: быдлоcoding

CSS трюки


https://habrahabr.ru/company/mailru/blog/350160/

«Чем так плох OpenCart» и как сделать его лучше

Есть такая замечательная статья «Чем так плох opencart«, рекомендую к прочтению всем, кто занимается разработкой под него родимого. Все правильно говорит автор.

Теперь о выводах. Выводы просты: кодите под opencart? Не повторяйте ошибок его производителей)

Итак, пишем модуль доставки. Погнали.

Подгружаем языки (речь тут идет об админке):
в контроллере:

$this->data['lang'] = $this->load->language('shipping/myshipping');

в шаблоне

<td><?php echo $lang['entry_name']; ?></td>

Просто? Просто! А экономит процентов 40 экранного пространства и читать код проще и новые переменные вводить. Окда.

Дальше:
в контроллере:

 $vars = array('my_shippingvar','my_status', 'my_sort_order',);

и перечисляем имена переменных настроек, которые юзер вводит в форме (шаблоне)

                        <tr>
                            <td><?php echo $lang['entry_sort_order']; ?></td>
                            <td><input type="text" name="my_sort_order" value="<?php if (isset($my_sort_order)) echo $my_sort_order; ?>" /></td>
                        </tr>

чуть ниже перечисления имен переменных в контроллере заюзаем их:

        foreach ($vars as $var) {
            if (isset($this->request->post[$var])) {
                $this->data[$var] = $this->request->post[$var];
            } else {
                $this->data[$var] = $this->config->get($var);
            }
        }

А весь код типа

  if (isset($this->request->post['my_sort_order'])) {
 $this->data['my_sort_order'] = $this->request->post['my_sort_order'];
 } else {
 $this->data['my_sort_order'] = $this->config->get('my_sort_order');
 }

можно смело грохнуть к чертовой бабушке.

Опа-опа-опа-па! Еще процентов 40 спагетти ушло,  наш контроллер похудел почти в три раза. Дальше приводим в чувства витринную часть,  модель и тд.

Хочешь что-то изменить — начни с себя. А там глядишь и до глав.разрабов дойдет.

Губка Боб квадратные превьюхи! История про K2, джумлу, превьюшки и адаптивный дизайн…

Потребовалось сделать один вроде бы несложный модуль для jooml’ы, чтобы выводил случайные материалы (они же товары) из k2 в стиле опенкарта. Причем желательно, чтоб эти материалы были в <div class=»span2″>  бутстраповский обернуты.

Как-то так:

thu

Ничего особо сложного. Переопределил в шаблоне default.php из mod_k2_content/Default все что надо было — ок, все збс. Кроме одного. Картинки small images кадвашные ресайзятся по-умолчанию только по  ширине. И в итоге получаем не красивую строку из карточек товаров одинаковой высоты, а ад и погибель: все карточки разной высоты. Строка плывет.  Отсюда мораль — надо ресайзить картинки, чтоб они стали квадратными. Подключаем в нашем родном шаблоне default.php свою либу, дописываем

                       <?php
                            $image=  thResize($item->image);
                        ?>


                            <a class="moduleItemImage" href="<?php echo $item->link; ?>" title="<?php echo JText::_('K2_CONTINUE_READING'); ?> &quot;<?php echo K2HelperUtilities::cleanHtml($item->title); ?>&quot;">
                                <img src="<?php echo $image; ?>" alt="<?php echo K2HelperUtilities::cleanHtml($item->title); ?>"/>
                            </a>

А в нашу либу добавляем следующий хак:

function get_file_extension($path ) {
    return pathinfo($path, PATHINFO_EXTENSION);

}

function makeThumb($source, $destination, $square_size = 167, $quality = 90) {

    $status = false;
    list($width, $height, $type, $attr) = getimagesize($source);

    if ($width > $height) {
        $width_t = $square_size;
        $height_t = round($height / $width * $square_size);
        $off_y = ceil(($width_t - $height_t) / 2);
        $off_x = 0;
    } elseif ($height > $width) {

        $height_t = $square_size;
        $width_t = round($width / $height * $square_size);
        $off_x = ceil(($height_t - $width_t) / 2);
        $off_y = 0;
    } else {

        $width_t = $height_t = $square_size;
        $off_x = $off_y = 0;
    }

    $thumb_p = imagecreatetruecolor($square_size, $square_size);

    $extension =get_file_extension($source);

    if ($extension == "gif" or $extension == "png") {

        imagecolortransparent($thumb_p, imagecolorallocatealpha($thumb_p, 0, 0, 0, 127));
        imagealphablending($thumb_p, false);
        imagesavealpha($thumb_p, true);
    }

    if ($extension == 'jpg' || $extension == 'jpeg')
        $thumb = imagecreatefromjpeg($source);
    if ($extension == 'gif')
        $thumb = imagecreatefromgif($source);
    if ($extension == 'png')
        $thumb = imagecreatefrompng($source);

    $bg = imagecolorallocate($thumb_p, 255, 255, 255);
    imagefill($thumb_p, 0, 0, $bg);

    imagecopyresampled($thumb_p, $thumb, $off_x, $off_y, 0, 0, $width_t, $height_t, $width, $height);

    if ($extension == 'jpg' || $extension == 'jpeg')
        $status = @imagejpeg($thumb_p, $destination, $quality);
    if ($extension == 'gif')
        $status = @imagegif($thumb_p, $destination, $quality);
    if ($extension == 'png')
        $status = @imagepng($thumb_p, $destination, 9);

    imagedestroy($thumb);
    imagedestroy($thumb_p);

    return $status;
}

function thResize($image) {
    $path_parts = pathinfo($image);
    $image_new = $path_parts['dirname'] . '/t200_' . basename($image);

    if (makeThumb(JPATH_ROOT .$image, JPATH_ROOT .$image_new, $square_size = 200, $quality = 100)) {
        return $image_new;
    }
}

На выходе имеем квадратные thumbnailы 200×200, с белой окантовкой если до нужного размера не дотянули.  (потом  параметры можно из настроек потягать, но пока это не актуально, все равно img в бутстраповском divе на 100% по ширине растягивается.)

Решение найдено тут: http://stackoverflow.com/questions/16664744/square-thumbnail-advance

opencart «Новые поступления» и «Лидеры продаж» — показывать товары только из категории

Есть такие дефолтные модули в opencart’е — latest и bestseller, так вот — разместив их на лайаут Category мы видим фигню: в категории «Гробы» — врезка «Новинки», а в ней показываются товары типа «Презерватив светящийся», «Нос клоунский» и т.д. Короче показывает новинки из других категорий. Это не есть гуд. Лезем на myopencart и наблюдаем печальную картину — нужные нам модули продают за денежку :((
Мы пойдем другим путем.

1. Лезем в catalog/controller/module/latest.php
перед

protected function index($setting) {<

добавляем:

private function _endc( $array ) { return end( $array ); }

2. потом, перед

$results = $this->model_catalog_product->getProducts($data);

вставляем:

if ((isset($this->request->get['route'])) AND ($this->request->get['route'] == 'product/category'))
        {
            $category_id = $this->_endc(explode('_', (string)$this->request->get['path']));        
            $data['filter_category_id'] = $category_id;
            $data['filter_sub_category'] = TRUE;
        }
        
        
        if ((isset($this->request->get['route'])) AND (isset($this->request->get['manufacturer_id'])) AND ($this->request->get['route'] == 'product/manufacturer/product'))
        {
            $manufacturer_id = $this->request->get['manufacturer_id'];        
            $data['filter_manufacturer_id'] = $manufacturer_id;            
        }

И теперь на странице категории — новинки только из нее. А бонусом та же песня и со страничкой производителей.

За модуль спасибо aduakasoft.com, кажется только они решились выложить своё решение бесплатно на opencart.com

1C выгрузка + обработка php = xynta какая-то

При выгрузке из 1С-ки (в xml, для последующей вгрузки в php скриптик) индус-програмизд набыдлокодил цены в формате «12 636″. Т.е. пробел в цифру засунул.
Молодец.
Вгружаю — xynta какая-то вгружается. Не удаляется пробел этот.
Полез в код. Попробовал разные методы и str_replace (» «, «») и preg_replace на \s и \t натравливал и т.д. и т.п. хрен-то-там!
Не удаляются пробелы и всё!

Лечится только одним способом:

	function tonumericstr($str) {
	    $str = trim($str);
		    for($i=0;$i<=strlen($str);$i++) { if(is_numeric($str[$i]) || $str[$i]==".") { $new_str.=$str[$i]; } } 
	    return $new_str;
        }

ну или так для удобства можно сделать:

        //$dec_delim - отделяет целую часть от дробной
	function tonumericstr($str,$dec_delim='.') {
	    $str = trim($str);
		    for($i=0;$i<=strlen($str);$i++) { if(is_numeric($str[$i]) || $str[$i]==$dec_delim) { $new_str.=$str[$i]; } } 
	    return $new_str;
        }