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

no comments

vertical-align: -20%;

git hints

Самые частые «oh shit» при работе с гитом: http://ohshitgit.com/

Микрофреймворки

Два полезных микрофрейма для всяких быстропроектов.

https://www.slimframework.com/docs/tutorial/first-app.html

и

https://lumen.laravel.com/docs/5.5

Еще одна полезная либа

Микролиба мейлер на php

https://github.com/anton-pribora/ApMailer

На всяких быстро-лендингах и прочей мелочевке очень пригодится.
Особенно удобно, что умеет копию письма схоронять локально.
Ну и html с аттачами — прям изи.

Вы также любите регекспы, как люблю их я?

Обожаю писать регулярки. Помнить все типы, модификаторы и операторы, что нужно экранировать, а что нет. Писец короч.
Так вот оказывается есть чудесная либа:
https://github.com/gherkins/regexpbuilderphp

и она умеет так:

$regExp = $builder
->startOfInput()
->exactly(4)->digits()
->then("_")
->exactly(2)->digits()
->then("_")
->min(3)->max(10)->letters()
->then(".")
->anyOf(array("png", "jpg", "gif"))
->endOfInput()
->getRegExp();

//true
$regExp->matches("2020_10_hund.jpg");
$regExp->matches("2030_11_katze.png");
$regExp->matches("4000_99_maus.gif");

//false
$regExp->matches("123_00_nein.gif");
$regExp->matches("4000_0_nein.pdf");
$regExp->matches("201505_nein.jpg");

Как же это охуенно!

Список всевозможных апишек

https://github.com/toddmotto/public-apis

оптимизируем картинки сайтов

Ставим jpegoptim и optipng.

Первый раз запускаем руками

find /var/www ! -regex  '*.\(jpg\|JPG|jpeg\)$'  -print0 |  xargs -0 jpegoptim --max=94 --preserve --totals >> /root/jpegoptimfirsttime.log

И уходим пить кофе.

Потом делаем скриптик

#!/bin/bash
echo `date` >> /root/optipng.log
find /var/www/ -mtime -2 -iname '*.png' -print0 | \
 xargs -0 optipng -o7 -log /root/optipng.log -preserve
echo `date` >> /root/jpegoptim.log
find /var/www/ -mtime -2 -iname '*.jpg' -print0 | \
 xargs -0 jpegoptim --max=94 --preserve --totals >> /root/jpegoptim.log

И запускаем его по крону

# m h dom mon dow command
0 1 * * * /root/optimize-images.sh

Экономим место на хостинге и трафик. Реально можно подосвободить до 50%.
С max=94 можно поиграться. Если у вас не галерея профессиональных фотографий, то можно смело ставить 90.

yii переводы

Вот что значит по верхам читать маны:

Сидел ручками заполнятл messages/*.php  файлики. Копипаст, перевод, копипаст…

А оказывается:

yyic message /path/to/messageconfig.php

и всё — файлы перевода генерятся автоматически. Yiiшка и это тоже умеет.

Формат конфига:

return array(
    'sourceLanguage'=>'ru',
        'sourcePath'=>dirname(__FILE__).'/../',
        'messagePath'=>dirname(__FILE__).'/../messages',
        'languages'=>array('ru','en'),
        'fileTypes'=>array('php'),
        'overwrite'=>true,
        'exclude'=>array(
                '.svn',
                '.gitignore',
                'yiilite.php',
                'yiit.php',
                '/i18n/data',
                '/messages',
                '/vendors',
                '/web/js',
                '/yii',
                '/extensions',
                '/migrations',
        ),
        'removeOld' => true,
        'sort' => true,
);

Заставить opencart работать быстрее

Полезные материал по оптимизации опенкарта  (проверено,  реально существенно ускоряют oc):

Серверная оптимизация (файлики тут)   (на новых версиях не работает)

Клиентская оптимизация

Ну и полезный хак (багфикс) на закуску: тут

 

 

«Чем так плох 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 спагетти ушло,  наш контроллер похудел почти в три раза. Дальше приводим в чувства витринную часть,  модель и тд.

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