1 Востаннє редагувалося ping (01.07.2013 09:33:38)

Тема: PrestaShop - питання по ходу.

Поставив на кілька сайтів цю CMS, час від часу виникають питання.
Писатиму їх сюди - може яка добра душа відповість.
А як знайду відповідь сам - то  теж писатиму - може кому в пригоді стане.

Наприклад - після встановлення офіціного пакету  1.5.4 виявилося, що система генерую невірні Title для сторінок (і не тільки їх). Вона пише їх в абсолютно безпечному, зате нікому не потрібному вигляді :)

Нагуглив рішення:
в файлі tools/smarty/plugins/modifier.escape.php
зробити наступні зміни:

return mb_convert_encoding($string, 'HTML-ENTITIES', $char_set);

замінити на:

return mb_convert_encoding($string, 'UTF-8' ,$char_set);

а тепер питання -
я вручну через phpmyadmin поміняв значення поля on_sale з 1 до 0 для всіх записів:

UPDATE 'ps_product' SET 'on_sale' = '0' ;

ніякого ефекту.  Тоді поставив '0' для поля 'indexed'

теж не враховано зміни.

питання - як сказати системі, щоб вона переіндексувала базу примусово?

2

Re: PrestaShop - питання по ходу.

питання - як сказати системі, щоб вона переіндексувала базу примусово?

там є декілька рівнів індексації. Який саме вам потрібен?
один з них
Back Office > Preferences > Search
інший
Back Office > Modules > blocklayered  (фільтр пошуку який зліва виводиться)
там є такі фішки
Index all missing prices
Re-build entire price index
Build attribute index
Build url index

3 Востаннє редагувалося ping (04.07.2013 20:54:40)

Re: PrestaShop - питання по ходу.

є в престі такий модуль watermark
принцип роботи:

1. завантажуємо бажаний водяний знак.
2. на основі оригіналу перегенеровуємо базу готових до видачі типорозмірів на захищені варіанти під передбачені користувачем типорозміри .
вони і видаються, щоб не тратити час при генеруванні конкретного запиту.
3. при  потребі можна можна повторити з іншим водяним знаком або відключити модуль  - і перегенерувати оригінал без watermark.

а тепер питання - який толк з цих всіх захистів, якщо я просто:
1. знаючи структуру файлів, набираю:
http://demostore1.avtweb.com.ua/img/p/3/1/31.jpg
де p - product , 31 - (ID_IMAGE)
2.риюся по sitemap.xml:

<image:image>
<image:loc>[b]www.aktywnysmyk.pl/23-186/rowerek-biegowy-kettler-speedy-10.jpg[/b]</image:loc><image:caption>Widok z boku  - rowerek bez pedałów Kettler Speedy 10''</image:caption><image:title>Widok z boku  - rowerek bez pedałów Kettler Speedy 10''</image:title></image:image>

і отримую готовенький лінк на картинку.

звісно - це зручніше робити роботами...

яке тут правильне рішення для захисту від крадіжки зображень?

переіменовувати стандартні каталоги ?
не вихід, бо картинки теж треба індексувати пошуковиками.

проставити наперед водяний знак? (aktywnysmyk.pl так і зробив)
теж не дуже добре - при додаванні нового товару треба це робити вручну.

4

Re: PrestaShop - питання по ходу.

а тепер питання - який толк з цих всіх захистів, якщо я просто:
1. знаючи структуру файлів, набираю:
http://demostore1.avtweb.com.ua/img/p/3/1/31.jpg

Є юзери які не знають.

яке тут правильне рішення для захисту від крадіжки зображень?

Завантажуйте картинку же з водяним знаком.

Я б робив так: на локальному компютерів є папка з картинками по товарах. Зразу автоматом генерується з водяним знаком. Потім беру картинку і завантажую її на сайт. і все немає приколів. Так простіше бо тоді у вас всі зображення на сайті будуть з водяним знаком а у вас на компютері оригінали ;)

p.s. як попереднє питання вирішили?

5

Re: PrestaShop - питання по ходу.

funivan написав:

а тепер питання - який толк з цих всіх захистів, якщо я просто:
1. знаючи структуру файлів, набираю:
http://demostore1.avtweb.com.ua/img/p/3/1/31.jpg

Є юзери які не знають.

вони можуть взяти на допомогу юних хакерів, які за 10 доларів напишуть робота, котрий тупо пройдеться по всіх каталогах і збере всі зображення :)


яке тут правильне рішення для захисту від крадіжки зображень?

Завантажуйте картинку же з водяним знаком.

Я б робив так: на локальному компютерів є папка з картинками по товарах. Зразу автоматом генерується з водяним знаком. Потім беру картинку і завантажую її на сайт. і все немає приколів. Так простіше бо тоді у вас всі зображення на сайті будуть з водяним знаком а у вас на компютері оригінали ;)

якщо це робити самому, то так.
а якщо це робить користувач - то ховайся .
по перше - картинки в нього з’являються по ходу - наприклад - долучив нову товарну групу.
наприклад - в моєму випадку, користувач посадив дівчинку за комп і вона чемно грабає з pdf каталогу картинки і одразу вносить їх в сайт. і буде це робити ... зараз скажу... 4000 позицій, в день вона вносить 60 позицій... біля 2-ох місяців роботи.
очевидно, що йому не хочеться, щоб праця і гроші легко попали до конкурентів.

але, очевидно, що модуль watermark як захист не годиться. це звичайна защіпка на двері, навіть не колодка.

далі, в prestashop є модуль gsitemap для генерування sitemap.xml:
   

Google sitemap Розроблено :    PrestaShop| Version: :    2.1.1 | Категорія :     SEO
Опис : Generate your Google sitemap file

гарна річ, розуміє багатомовність, і, в т.ч. генерує лінки на зображення та їх описи.
здавалося б треба радти, але...
парсінг sitemap.xml відкриває двері до всіх ОРИГІНАЛІВ зображень (та ще й з описами) не тільки роботам пошукових систем...

так що доведеться вчити користувача наносити водяний знак ДО ВНЕСЕННЯ товарі на сайт, а watermark деінсталювати :(

p.s. як попереднє питання вирішили?

ті лінки, що Ви надали - на жаль вже на вищих рівнях. копатися часу не було, то ж я поступив
не професійно і не красиво - зберіг і по новій імпортував базу з CVS.

6

Re: PrestaShop - питання по ходу.

ще один з варіантів це підкрутити модуль так що б він і на початкове зображення накладав водяний знак а потім просто ресайзаів і усе ))

7

Re: PrestaShop - питання по ходу.

funivan написав:

ще один з варіантів це підкрутити модуль так що б він і на початкове зображення накладав водяний знак а потім просто ресайзаів і усе ))

можна простіше - він робить файл nnn-watermark.jpg  (nnn - ID продукту)
це, наскільки я побачив, оригінал+watermark

тепер досить скопіювати оригінал десь в секретний каталог а на його місце переписати під іменем оригіналу  :

mv nnn.jpg img/secret_folder/
cp nnn-watermark.jpg nnn-jpg

проблема виникне, якщо користувач захоче масово перегенерувати шаблони...
хіба і тут пиляти  - спершу копіювати  оригінал взад, далі перегенерація .

щось таке...

8

Re: PrestaShop - питання по ходу.

Можна за допомогою .htaccess  заборонити напряму доступ до файлу, а звертатись локально до картинки можна буде. Накладати водяний знак вручну і т.п. і т.д дуже поганий підхід:
- якщо клієнту захочеться ще один такий же магазин? (знаю багато прикладів)
- якщо клієнт захоче змінити адресу сайту, 301 редірект зі старого домену не можна ставити, а на картинках водяні знаки...
- якщо клієнт захоче змінити розташування водяного знаку, кольоровість, прозорість? (і таке було в моїй практиці)
- ваш магазин серйозно розростеться, у вас буде партнерська програма, але багато хто не захоче розміщувати фото з вашим водяним знаком

Подякували: ping1

9

Re: PrestaShop - питання по ходу.

Replace написав:

Можна за допомогою .htaccess  заборонити напряму доступ до файлу, а звертатись локально до картинки можна буде. Накладати водяний знак вручну і т.п. і т.д дуже поганий підхід:
- якщо клієнту захочеться ще один такий же магазин? (знаю багато прикладів)
- якщо клієнт захоче змінити адресу сайту, 301 редірект зі старого домену не можна ставити, а на картинках водяні знаки...
- якщо клієнт захоче змінити розташування водяного знаку, кольоровість, прозорість? (і таке було в моїй практиці)
- ваш магазин серйозно розростеться, у вас буде партнерська програма, але багато хто не захоче розміщувати фото з вашим водяним знаком

Ви праві. оригінал чіпати не варто.

а якщо з допомогою .htaccess перенаправляти на зроблений модулем nnn-watermark.jpg  (nnn - ID продукту) ??
тоді не буде проблем з індексуванням по лінках, які генерує gsitemap

10

Re: PrestaShop - питання по ходу.

PrestaShop ніколи не дивився, але думаю проблем не повинно бути.

11 Востаннє редагувалося ping (05.07.2013 22:14:43)

Re: PrestaShop - питання по ходу.

Replace написав:

PrestaShop ніколи не дивився, але думаю проблем не повинно бути.

вроді зробив. описую:

Отже - в prestashop зображення продуктів зберігаються в підкаталозі : public_html/img/p/[далі по підкаталогах в залежності від id_product]. (коли ми затягуємо зображення для продукта йому присвоюється номер)
наприклад , якийсь продукт отримав  зображення №46 (дані про це можна глянути в таблиці ps_image):
ls public_html/img/p/4/6/*

46-home_default.jpg
46-large_default.jpg
46-small_default.jpg
46-medium_default.jpg
46-thickbox_default.jpg
46-watermark.jpg
46.jpg
index.php

де 46.jpg - оригінал, а 46-watermark.jpg - оригінал з накладеним водяним знаком.

нам хочеться обмежити можливість скачувати 46.jpg, але не хочеться його модифікувати або ховати .

отже, в каталог public_html/img
помістив такий файл .htaccess

<Files ~ "^\.(htaccess|htpasswd)$">
deny from all
</Files>
RewriteEngine on
RewriteCond %{REQUEST_URI} ^.+\d\.jpg$
RewriteCond %{REQUEST_URI} /img/p/
RewriteRule (.*)\.jpg$  $1-watermark.jpg

order deny,allow

це мій перший власноруч написаний .htaccess, так що буду вдячний за критику :)

вроді працює.

п.с.
тут ще б дописати одну умову - RewriteCond . Якщо нема в каталозі , де шукається файл nnn.jpg файла nnn-watermark.jpg - значить не треба нічого перенаправляти.
але не розумію, як її втілити засобами .htacceess :(
для цього потрібно якось вирізати з %{REQUEST_URI} ім’я файла , а як це зробити?

p.p.s.
трошки подумав :

<Files ~ "^\.(htaccess|htpasswd)$">
    deny from all
</Files>
    RewriteEngine on
    RewriteCond %{REQUEST_URI} ^.+\d\.jpg$
    RewriteCond %{REQUEST_URI} /img/p/
    RewriteRule (.*)(\d+)\.jpg$ $1$2-watermark.jpg
    RewriteCond  %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
    #повернути первісний URL, оскільки шаблону з watermark не створено
    RewriteRule (.*)(\d+)-watermark\.jpg$ $1$2.jpg [L]

    order deny,allow

якщо шаблон watermark  є - все нормально.
Якщо нема - то чомусь зациклюється.
на сьогодні досить, завтра буду копати...

12 Востаннє редагувалося ping (11.07.2013 20:14:28)

Re: PrestaShop - питання по ходу.

PrestaShop™ 1.5.4.1 по замовчуванню не має транслітерації і якщо обрати friendly URL - генеруватиме URL кирилицею.
якщо хочеться таки мати транслітерацію - треба внести зміни у файл admin.js - трохи доповнити функцію str2url:

Прихований текст
function str2url(str, encoding, ucfirst)
{
    str = str.toUpperCase();
    str = str.toLowerCase();
    if (PS_ALLOW_ACCENTED_CHARS_URL)
        str = str.replace(/[^a-z0-9\s\'\:\/\[\]-]\\u00A1-\\uFFFF/g,'');
    else
    {
  str = str.replace(/[\u0105\u0104\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u0410\u0430]/g,'a');
  str = str.replace(/[\u0411\u0431]/g,'b');
  str = str.replace(/[\u00E7\u010D\u0107\u0106\u0426\u0446]/g,'c');
  str = str.replace(/[\u0427\u0447]/g,'ch');
  str = str.replace(/[\u010F\u0414\u0434]/g,'d');
  str = str.replace(/[\u00E8\u00E9\u00EA\u00EB\u011B\u0119\u0118\u0117\u0401\u0404\u0415\u0435\u0451\u0454\u042D\u044D]/g,'e');
  str = str.replace(/[\u0424\u0444]/g,'f');
  str = str.replace(/[\u0413\u0433\u0490\u0491]/g,'g');
  str = str.replace(/[\u0425\u0445]/g,'h');
  str = str.replace(/[\u00EC\u00ED\u00EE\u00EF\u012F\u0406\u0407\u0456\u0457\u0418\u0438\u042B\u044B]/g,'i');
  str = str.replace(/[\u0419\u0439]/g,'j');
  str = str.replace(/[\u041A\u043A]/g,'k');
  str = str.replace(/[\u0142\u0141\u041B\u043B]/g,'l');
  str = str.replace(/[\u041C\u043C]/g,'m');
  str = str.replace(/[\u00F1\u0148\u041D\u043D]/g,'n');
  str = str.replace(/[\u00F2\u00F3\u00F4\u00F5\u00F6\u00F8\u00D3\u041E\u043E]/g,'o');
  str = str.replace(/[\u041F\u043F]/g,'p');
  str = str.replace(/[\u0159\u0155\u0420\u0440]/g,'r');
  str = str.replace(/[\u015B\u015A\u0161\u0421\u0441]/g,'s');
  str = str.replace(/[\u0428\u0448]/g,'sh');
  str = str.replace(/[\u0429\u0449]/g,'sch');
  str = str.replace(/[\u00DF]/g,'ss');
  str = str.replace(/[\u0165\u0422\u0442]/g,'t');
  str = str.replace(/[\u00F9\u00FA\u00FB\u00FC\u016F\u016B\u0173\u0423\u0443]/g,'u');
  str = str.replace(/[\u0412\u0432]/g,'v');
  str = str.replace(/[\u00FD\u00FF]/g,'y');
  str = str.replace(/[\u042E\u044E]/g,'yu');
  str = str.replace(/[\u042F\u044F]/g,'ya');
  str = str.replace(/[\u017C\u017A\u017B\u0179\u017E\u0417\u0437]/g,'z');
  str = str.replace(/[\u0416\u0436]/g,'zh');
  str = str.replace(/[\u00E6]/g,'ae');
  str = str.replace(/[\u0153]/g,'oe');
  str = str.replace(/[\u013E\u013A]/g,'l');
  str = str.replace(/[\u0155]/g,'r');
  str = str.replace(/[\u042A\u044A\u042C\u044C]/g,'');
  
  str = str.replace(/[^a-z0-9\s\'\:\/\[\]-]/g,'');
    }
    str = str.replace(/[\u0028\u0029\u0021\u003F\u002E\u0026\u005E\u007E\u002B\u002A\u002F\u003A\u003B\u003C\u003D\u003E]/g, '');
    str = str.replace(/[\s\'\:\/\[\]-]+/g, ' ');

    // Add special char not used for url rewrite
    str = str.replace(/[ ]/g, '-');
    str = str.replace(/[\/\\"'|,;]*/g, '');

    if (ucfirst == 1) {
        var first_char = str.charAt(0);
        str = first_char.toUpperCase()+str.slice(1);
    }

    return str;
}

кодові таблиці UTF-8 http://unicode-table.com/en/#cyrillic

13

Re: PrestaShop - питання по ходу.

Здається такі речі потрібно на стороні сервера робити, але з CMS незнайомий, можливо там і так прокатить.

14 Востаннє редагувалося ping (12.07.2013 09:21:27)

Re: PrestaShop - питання по ходу.

Replace написав:

Здається такі речі потрібно на стороні сервера робити, але з CMS незнайомий, можливо там і так прокатить.

так це і робиться на стороні сервера. чи я не вірно Вас розумію?
воно працює, але тільки коли вводити нову позицію через адмінку.
наскільки я зрозумів - це стандартне рішення для цієї CMS, але з появою нормальної підтримки кирилиці в URL його випиляли.
для експерименту на майбутньому новому сайті я поставив кирилицю в URL,
але вчорашній перегляд tools for webmaster from google мене переконав цього не робити:

5
    
Sitemap: horoz.com.ua/uk_0_sitemap.xml
HTTP Error: 404
URL: /%D0%BB%D0%B0%D0%BC%D0%BF%D0%B0-%D0%B5%D0%BD%D0%B5%D1%80%D0%B3%D0%BE%D0%B7%D0%B1%D0%B5%D1%80%D1%96%D0%B3%D0%B0%D1%8E%D1%87%D0%B0/35-%D0%BB%D0%B0%D0%BC%D0%BF%D0%B0-%D0%B5%D0%BD%D0%B5%D1%80%D0%B3%D0%BE%D0%B7%D0%B1%D0%B5%D1%80%D1%96%D0%B3%D0%B0%D1%8E%D1%87%D0%B0-r7s-j189-40w-6400k.html

мабуть, доведеться писати маленьку програмку для перегенерування транслітом URL для бази :(

15 Востаннє редагувалося ping (14.07.2013 21:33:04)

Re: PrestaShop - питання по ходу.

написав програмку, яка генерує для ps_ product and ps_category  транслітерні URL та заповнює описові поля на основі назви . (prestashop 1.5.4.1)

звісно, базу перед тим треба зберегти, а сам магазин - перевести в режим тех. обслуговування.
ще краще для безпеки і щоб сервер не перевантажувати  - скачати собі локальну копію бази і на ній пробувати.

Прихований текст
<?php 

define(DB_PASSWORD, 'your_base_password');
define(DB_USER,    'your_base_user');
define(DB_HOST, 'localhost(or other host)');
define(DB_BASENAME, 'your_base_name');

function s2one($str) {  // replace anymore spaces in string to one
    $i=0;
    while (substr_count($str, "  ") > 0) {
        $str = str_replace("  ", " ", $str);
    }
    return $str;
}

function translitstr($str) {
    $tr = array(
            "А"=>"a","Б"=>"b","В"=>"v","Г"=>"g","Ґ"=>"g",
            "Д"=>"d","Е"=>"e","Є"=>"e","Ж"=>"j","З"=>"z","И"=>"y","І"=>"i","Ї"=>"i",
            "Й"=>"y","К"=>"k","Л"=>"l","М"=>"m","Н"=>"n",
            "О"=>"o","П"=>"p","Р"=>"r","С"=>"s","Т"=>"t",
            "У"=>"u","Ф"=>"f","Х"=>"h","Ц"=>"ts","Ч"=>"ch",
            "Ш"=>"sh","Щ"=>"sch","Ъ"=>"","Ы"=>"yi","Ь"=>"",
            "Э"=>"e","Ю"=>"yu","Я"=>"ya","а"=>"a","б"=>"b",
            "в"=>"v","г"=>"g","ґ"=>"g","д"=>"d","е"=>"e","є"=>"e","ж"=>"j",
            "з"=>"z","и"=>"y","і"=>"i","ї"=>"i","й"=>"y","к"=>"k","л"=>"l",
            "м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r",
            "с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h",
            "ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"y",
            "ы"=>"yi","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya",
            " "=> "-", "."=> "", ","=> "-","/"=> "-","+"=> "-", "*"=>"x"
    );
    return strtr($str,$tr);
}
function str2url($urlstr) {
    if (preg_match('^A-Za-z0-9_\-', $urlstr) === FALSE) {
        echo "Run Translation <br/>";
        $urlstr = translitstr($urlstr);
        return ucfirst(preg_replace('/[^A-Za-z0-9_\-]/', '', $urlstr));
    }
}
function str2keywords($str) {
    $tr = array(
            " "=> ",", "."=> "", "/"=> ","
    );
    return strtr($str,$tr);
}


$dbopen = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_BASENAME);
$dbopen->set_charset("utf8");
if ($dbopen->connect_errno) {
    echo "Failed to connect to MySQL: (" . $dbopen->connect_errno . ") " . $dbopen->connect_error;
}
echo '<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>';
echo $dbopen->host_info."<br/>";
echo $dbopen->info."<br/>";
echo $dbopen->stat()."<br/>";
echo $dbopen->protocol_version."<hr/>";

$todo = array ('_category','_product');

foreach ($todo as $hose) {
    
    $current_table_name = 'ps'.$hose.'_lang';
    $hose = 'id'.$hose;
    
$dbquery = $dbopen->query("SELECT $hose, link_rewrite, name, meta_keywords FROM $current_table_name ORDER BY $hose");
$i_num_rows = $dbquery->num_rows;
echo $current_table_name.' has rows -> '.$i_num_rows."<br/>";
for ($i = 0; $i < $i_num_rows ; $i++) {
    $dbrow = $dbquery->fetch_assoc();
    $name = s2one($dbrow['name']);
    $translit = str2url(strtolower($name));
    $meta_keywords = str2keywords(strtolower($name));
    
    $id_hose = $dbrow[$hose];
    print  $id_hose.' '.$name."<br/> -> ".$translit.' '.$meta_keywords."<br/><br/>";
    
    if (!$dbopen->query("UPDATE $current_table_name SET link_rewrite = '$translit', meta_keywords = '$meta_keywords', 
                         meta_title = '$name', meta_description = '$name' 
                        WHERE $hose = '$id_hose' LIMIT 1 ")) {
        echo 'Can not make update';
    }

}

echo "<hr/>";
}
$dbopen->close();
Подякували: Replace1

16 Востаннє редагувалося funivan (14.07.2013 22:52:17)

Re: PrestaShop - питання по ходу.

while (substr_count($str, " ") > 0) {
$str = str_replace(" ", " ", $str);
}

краще через preg_replace =)

до речі можна написати модуль до прести що б можна було на інші сайти встановлювати )

p.s. просто плагін транслітераціх на яваскрипті https://github.com/funivan/ukrTranslit/ … ranslit.js

17

Re: PrestaShop - питання по ходу.

Чи є досвід експлуатації PrestaShop з кількістю товарів більше 5000 ?
Почав затикатися сайт - не можливо ввести новий товар. Дуже довга обробка. Викидає по таймауту.

18

Re: PrestaShop - питання по ходу.

ping написав:

Чи є досвід експлуатації PrestaShop з кількістю товарів більше 5000 ?
Почав затикатися сайт - не можливо ввести новий товар. Дуже довга обробка. Викидає по таймауту.

Є сенс дослідити запити. Мо, десь висить важка вибірка з підзапитами або щось таке.

19

Re: PrestaShop - питання по ходу.

У мене є досвід близько 10 к товарів. Фактично хостинг за 300 грн в рік витягує таку систему але якщо б був мемкеш і якийсь хороший сервачок було б взагалі супер)