Ответить Новая тема Новый опрос 
Всего: 9 1 2 3 4 5 > »
 Хочу поделиться опытом
Dulco


Cпециалист
Сообщений: 223
Откуда: Краснодар
Регистрация: 05-07-2012


05-07-2012 14:35
Здравствуйте, уважаемы любители Prestashop.
Сразу хочу отметить, что я не программист, все что написано ниже не претендует на идеальность, но может пригодиться таким же как и я новичкам.
Итак, нам потребуется три программы: NotePad+++, OpenOffice (calc), UMI CMS бесплатная в локальном варианте (скачивается вместе с денвером), в которой есть прекрасный модуль обмена данными.
Инструкция.
Скачиваем UMI CMS коммерческую версию, бесплатная в локальном варианте (скачивается вместе с денвером)
Импорт
Производим выгрузку товара из 1С в папку. Затем из папки 1cbitrix файлы import.xml и offers.xml помещаем в папку files-filesToImport, а папку import_files помещаем в папку images-cms-data. Заходим в модули-> модуль Обмен данными. Импорт: настроить новый импорт, сразу в редактирование типа данных(добавить поле, название – изображение, тип – изображение. Сохранить и выйти) Далее называние нового импорта как хотим, формат данных-Commerce ML 2.0, раздел сайта - каталог товаров, файл данных сначала import.xml (потом offers.xml), в изображении выбираем любую картинку из папки import_files.
Производим импорт сначала в файле данных выставив import.xml(можно зайти в модуль каталог и посмотреть что выгрузилось, цен на товар еще не будет), затем повторный импорт с offers.xml.
Экспорт в CSV
Перед экспортом обязательно зайти в модуль каталог и сделать все категории и подкатегории активными(нажать круглую кнопку включить страницу)
Настроить новый экспорт. Название – любое, формат экспорта – данные в формате CSV, разделы сайта которые будут экспортированы: находим наш каталог, окрываем его список и кликом мышки добавляем по одной все категории. Добавить и выйти. Выполнить экспорт.
Полученный файл CSV открываем Notepad+++ и редактируем в Кодировки-> Преобразовать в UTF-8 без BOM->сохранить
Далее открываем файл в Open Office (ОО)
Для импорта на сайт нам потребуется файл категорий и файл товары и чтобы отделить категории от товаров используем макрос ОО
[hide]
Код:
Sub applyMyCustomFilter
REM Filter one column of the active sheet's used range by 1 regular expression
'calls: getUsedRange
REM Which column index of the used range? (first column has index 0):
Const colID = 0 '< column #6 of the used range
REM if the used range starts in column A (column #0), colID 6 refers to column G

Const sRegex = "^(66)|(67)|(68)|(69)|(70)|(71)|(72)|(73)|(74)|(75)|(76)|(77)|(78)|(79)|(80)|(81)|(82)|(83)|(84)|(85)|(86)|(87)|(88)|(89)|(90)|(91)|(92)|(93)|(94)|(95)|(96)|(97)|(98)|(99)|(100)|(101)|(102)|(103)|(104)|(105)|(106)|(107)|(108)|(109)|(110)|(111)|(112)|(113)|(114)|(115)|(116)|(117)|(118)|(119)|(120)|(121)|(122)|(123)|(124)|(125)|(126)|(127)|(128)|(129)|(130)|(131)|(132)|(133)|(134)|(135)|(136)|(137)|(138)|(139)|(140)|(141)|(142)|(143)|(144)|(145)|(146)|(147)|(148)|(149)|(150)|(151)|(152)|(153)|(154)|(155)|(156)|(157)|(158)|(159)|(160)|(161)|(162)|(163)|(164)|(165)|(166)|(167)|(168)|(169)|(170)|(171)|(172)|(173)|(174)|(175)|(176)|(177)|(178)|(179)|(180)|(160)|(161)|(162)|(163)|(164)|(165)|(166)|(167)|(168)|(169)|(170)|(171)|(172)|(173)|(174)|(175)|(176)|(177)|(178)|(179)|(180)|(181)|(182)|(183)|(184)|(185)|(186)|(187)|(188)|(189)|(190)|(191)|(192)|(193)|(194)|(195)|(196)|(197)|(198)|(199)|(200)|(201)|(187)|(188)|(189)|(190)|(191)|(192)|(193)|(194)|(195)|(196)|(197)|(198)|(199)|(200)|(201)|(202)|(203)|(204)|(205)|(206)|(207)|(208)|(209)|(210)|(211)|(212)|(213)$" '< this is one regex including the ORs as |
cEQ
= com.sun.star.sheet.FilterOperator.EQUAL' <some_column> EQUALs <some_regex>

REM one text-criterion
Dim fld as new com.sun.star.sheet.TableFilterField
fld.Field = colID
fld.Operator = cEQ
fld.StringValue = sRegex

REM now for the used range to be filtered:
sh = ThisComponent.CurrentController.getActiveSheet()
rg = getUsedRange(sh)
fd = rg.createFilterDescriptor(True)

REM All the additional filter options. Fill out like a form (True or False)
REM analogue to those in the standard and advanced filter dialogues below [More Options]:
REM Do we have column headers in the first row?
fd.ContainsHeader = True
REM Do we use pattern matching by means of regular expressions?
fd.UseRegularExpressions = True
REM not relevant with text values consisting of digits:
fd.IsCaseSensitive = False
REM means: hide duplicates having the same values in the entire row of the filtered range:
fd.SkipDuplicates = False
REM if true, an OutputPosition as csstable.CellAddress is required
fd.CopyOutputData = False
REM This is only implemented for rows at the moment. Filtering columns is not possible:
REM fd.Orientation = com.sun.star.table.TableOrientation.ROWS
REM Only relevant with CopyOutputData when refreshing db-ranges:
REM False is useful for one-time snapshots copied to OutputPosition
REM fd.SaveOutputPosition = False

REM we use only one of up to 8 criteria:
fd.setFilterFields(Array(fld))
rg.filter(fd)
End Sub

REM one of my frequently used helper functions
Function getUsedRange(oSheet)
Dim oRg
oRg = oSheet.createCursor()
oRg.gotoStartOfUsedArea(False)
oRg.gotoEndOfUsedArea(True)
getUsedRange = oRg
End Function
[/hide]
Инструкция по использованию макроса.
1.Открыть макрос в редакторе
2.в Const colID = 0 (0-первый столбец, 1-второй и т.д.)нам требуется первый столбец
3.В скобках выделены цыфры-это строки наших категорий и подкатегорий(первый раз придется поработать ручками и поправить под свои нужды)
4.Выполнить макрос (останутся только наши категории и подкатегории товаров)
5.Сохраняем файл csv с названием, например, Categorii.csv
6.выделяем все и нажав правой кнопкой мыши на строках, удалить стоки.
7.Снова выделяем уже пустое поле
8.правой кнопкой мыши на сторках-показать(появляется наш список товаров без категорий и подкатегорий)
9.Сохраняем файл ,например, tovari.csv
Есть один нюанс, если товаров много, как у нас более 1000, то экспортировать файлы CSV из денвера можно по категориям и тогда у нас будет несколько файлов категорий что облегчит задачу по загрузке.
Дальше не буду рассказывать как импортировать товар в ИМ, об этом много написано.
PS забыл добавить перед импортом csv не забудьте залить папку с картинками на свой сайт по ftp и в файлах изменить ссылку на картинки, указав полный путь к ним, в ОО это делается просто и быстро ctl+f найти и заменить
Извините за косноязычность, писать статьи не мой удел


Сообщение отредактировано Dulco 05-07-2012 17:38 ...
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
Dulco


Cпециалист
Сообщений: 223
Откуда: Краснодар
Регистрация: 05-07-2012


05-07-2012 14:54
И в догонку, лично меня не устроила какрта Google и вот как я поменял ее на Яндекс карту.
Открываем файл stores.tpl и в конце кода добавляем
Код:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<script src="http://api-maps.yandex.ru/1.1/index.xml?key=ВАШ КЛЮЧ" type="text/javascript"></script>
    
<script type="text/javascript">

        window.onload = function () {
             var map = new YMaps.Map(document.getElementById("YMapsID"));
            map.setCenter(new YMaps.GeoPoint(координаты вашего местоположения), 15);
          

            map.addControl(new YMaps.TypeControl());
            map.addControl(new YMaps.ToolBar());
            map.addControl(new YMaps.Zoom());
            map.addControl(new YMaps.ScaleLine());
            map.enableScrollZoom();

          

            map.openBalloon(map.getCenter(),'F1');
          
                        
}
    </script>
    
</head>

<body>

Не забудте вставить ваш ключ, который выдается при регистрации в яндексе и в поле "координаты вашего местоположения" вставить числовые значения
В бэк офисе отключаем карту гугл: Инструменты-магазины в параметрах Показывать в футере: нет
Показывать в карте сайта:да
Простой поиск:да
Всем удачи
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
Dulco


Cпециалист
Сообщений: 223
Откуда: Краснодар
Регистрация: 05-07-2012


22-07-2012 12:02
Еще раз здравствуйте!
Пытаюсь написать модуль для Яндекс карты. Нужна помощь специалистов кто разбирается в PHP. Застрял на таком моменте: есть файл с одной строкой в котором записан ключ, считаваю файл и записываю в переменную
Код:
$r=fopen("data.php","r");
while($str=fgets($r,2048));

Есть второй файл со строкой:
<script src="http://api-maps.yandex.ru/1.1/index.xml?key=APIyandexkey" type="text/javascript"></script>
окрываем его для чтения и записи
Код:
$w=fopen("yandex.php","c+");

Вот теперь стоит задача найти в yandex.php строку с APIyandexkey и записать туда переменную $str
Только прошу не отсылать меня "погуглить яндексом", я там был и так как не разбираюсь толком в кодинге, мало что понял.
Как варинанты
1.
str_replace -- Заменяет строку поиска на строку замены , но тут строка меняется, а нам надо в строку дописать ключ APIyandexkey из переменной $str
2.

Код:
$finded = array(); // Массив для найденных строк
$w = file('yandex.php');
foreach($w as $stroka)// как записать поиск стоки с [b]APIyandexkey[/b]????
{
    if( stristr($stroka, $searched) ) // если строка содержит искомое
        $finded[] = $stroka; // добавляем строку в массив найденных
}
echo "<p>".implode("</p><p>",$finded)."</p>";// что тут надо записать вообще не соображу и куда тут воткнуть переменную $str


и как правильно записать не знаю.
В общем прошу помощи


Сообщение отредактировано Dulco 22-07-2012 15:12 ...
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
Dulco


Cпециалист
Сообщений: 223
Откуда: Краснодар
Регистрация: 05-07-2012


23-07-2012 15:23
Всем спасибо, разобрался сам с этой задачей, использовал для этого функции file_get_contents() и file_put_contents()
правда файл сохраняется в кодировке ANSI , буду теперь искать как первести ее в utf-8.
Если с модулем получиться выложу его сюда на форум
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
Dulco


Cпециалист
Сообщений: 223
Откуда: Краснодар
Регистрация: 05-07-2012


24-07-2012 08:35
Как и обещал выкладываю модуль Яндекс карты
Буду рад выслушать конструктивную критику и подсказки в доработке, это мой первый модуль
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
Vitek25
Новичок
Сообщений: 66
Откуда: Днепропетровск
Регистрация: 24-05-2012


26-07-2012 17:58
спасибо пригодиться !)
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
Dulco


Cпециалист
Сообщений: 223
Откуда: Краснодар
Регистрация: 05-07-2012


27-07-2012 10:06
Немного доработал модуль Яндекс карты, теперь яндекс карта отображается вместо гугл карты(файл stores.tpl перзаписывается) Модуль устанавливается как и обычной модуль престы.
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
Dulco


Cпециалист
Сообщений: 223
Откуда: Краснодар
Регистрация: 05-07-2012


01-08-2012 08:46
И снова здравствуйте!
Сегодня я хочу поделиться опытом создания простых модулей, для этого не нужны знания програмирования.
Для своего сайта мне захотелось сделать соц закладки расположенные под товарами, покопавшись в интернете нашел модуль у Orsa, но там меня не устроили большие иконки. Тогда я попробовал сделать модуль сам и удалось мне это за 30 минут. Теперь я расскажу вам как это делается.
Для людей с малым знанием програмирования или вообще без знаний это будет не так уж и трудно повторить.
Зачем изобретать велосипед? Для создания модуля нам потребуется Module DDLX Editor Prestashop, он бесплатный и сам создает модуль, нам остается только ввести название модуля и немного подправить файлы php и tpl, с таким расширением там по одному файлу и имеют они названия нашего модуля. Подправить это громко сказано, так что не пугайтесь. Достаточно открыть эти файлы Notepad++ и выполнить манипуляции описанные ниже. Начнем с самого простого. Файл tpl-это как раз тот файл который будет отображать наши соц закладки. Открыв файл выделяем все что там написано и удаляем, затем идем на страницу API Яндекса http://api.yandex.ru/share/ , где выбрав галочками нужные нам наборы сервисов и внешний вид получаем код, который копируем и вставляем в открытый Notepad++ файл tpl. Модуль практически готов и если вы его установите то увидите выбранные вами соц закладки в правой колонке вашего сайта. Но мне хотелось расположить наши закладки под товарами. Тут казалось бы ситуация сложная, но не так страшен черт как его малюют. В престашопе модули привязываются хуками(что это за понятие тут не буду описывать, поиск вам поможет) Лично я до этого момента знал только основные хуки leftColumn-это левая колонка сайта, rightColumn-правая(этот хук записан по умолчанию в нашем вновь созданном модуле и поэтому закладки отображаются у нас там), home-главная страница,top-верхняя часть сайта, footer-нижняя часть сайта. А какой же хук у товара? Тут в помощь нам приходят создатели престы, откройте любой модуль установленный у вас и имеющий закладку настроить. Сверху и снизу описания и настройки модулю можно найти кликабельные вкладки "управления хуками", кликаем на вкладку и попадаем на страницу описания хуков. Там же я и нашел хук по названию productfooter(по логике ясно что это нижняя часть товара). Теперь нам остается в открытом ранее в Notepad++ файле php нажать поиск ctrl+F, зайти в замечательную вкладку заменить, в поле найти вставить rightColumn и в поле заменить productfooter, замена должна произойти в двух местах кода. Вуаля, наш модуль готов. Результат можно посмотреть на моем сайте в подписи. Для тех кто хочет скачать готовый модуль, он так же в подписи


Сообщение отредактировано Dulco 01-08-2012 11:48 ...
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
Dulco


Cпециалист
Сообщений: 223
Откуда: Краснодар
Регистрация: 05-07-2012


05-08-2012 11:47
Приветствую вас!
Сегодня я вам расскажу о новой модификации модуля. Не секрет, что производители часто меняют внешний вид и комплектацию товара, не меняя при этом модель, за исключением штрихкода. Был у нас случай когда клиент купил образец беспроводной клавиатуры, в последствии заказал партию и она оказалась в другой упаковке и с другим наноприемником. Начались звонки и объяснения. что бы в дальнейшем избежать подобных случаев решил переделать Текстовый редактор главной страницы под свои нужды. Сделать это очень просто, модуль текстового редактора называется editorial, что я делаю: переименовываю папку с модулем и все файлы содержащие в коде слово editorial на messages, изменяю в уже новом файле messages.php хуки с home на productfooter. Переименовываю название и описание скрипта. Устанавливаю модуль и пользуясь только текстовым редактором вставляю html код с сообщением, которое появлятся под описанием товара.
Причиной перделалки именно текстового редактора является его многофункциональность, ведь тут можно еще и анонсы ставить и даже рекламму вашего нового товара или распродажи, ведь не всегда пользователь заходит на главную страницу сайта.
Для тех кто не может или не хочет заниматься переделкой модуля, выкладываю готовый http://f1tech.ru/upload/messages.zip
Результат работы модул можно глянуть на моем сайте в подписи.
Надеюсь был кому нибудь полезен
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
Dulco


Cпециалист
Сообщений: 223
Откуда: Краснодар
Регистрация: 05-07-2012


13-08-2012 08:48
Решил попробовать создать свой хук, но полной информации об этом не нашел, начало есть на многих форумах, а дальше для непосвященных темный лес. Разобрался сам и решил выложить все по полочкам на примере создания собственного хука для новой страницы, которую можно создать в бэк офисе: Инструменты->Страницы->Добавить страницу.
Чтобы название хука соответствовало его расположению называю его newpage.
Для примера создадим свой модуль который будет пользоваться нашим новым хуком и назовем его blocknewpage. Примеров подобных модулей много в инете и потому как создавать его не буду описывать а приведу уже готовый код
Код:
<?php

if (!defined('_CAN_LOAD_FILES_'))
    exit;

class BlockNewPage extends Module
{
    public function __construct()
    {
        $this->name = 'blocknewpage';
        $this->tab = 'f1';
        $this->version = '1.0';
        $this->author = 'ShopF1';
        $this->need_instance = 0;

        parent::__construct();

        $this->displayName = $this->l('Block with text at the new page position');
        $this->description = $this->l('Displays a text with New Page.');
    }

    public function install()
    {
        if (!$this->addNewPageHook() OR !parent::install())
            return false;
        return true;
    }

    public function uninstall()
    {
        return (parent::uninstall() AND $this->removeNewPageHook());
    }
    
    public function hooknewpage($params)
    {
        return $this->display(__FILE__, 'blocknewpage.tpl');
    }


    private function addNewPageHook()
    {
        return Db::getInstance()->Execute('INSERT INTO `'._DB_PREFIX_.'hook` (`name`, `title`, `description`, `position`) VALUES (\'newpage\', \'Hook new page\', \'Display new page hook\', 1)');
    }

    private function removeNewPageHook()
    {
        return Db::getInstance()->Execute('DELETE FROM `'._DB_PREFIX_.'hook` WHERE `name` = \'newpage\'');
    }
    
}

Далее создаем blocknewpage.tpl – модуль шаблона, в нем прописываем следующий код:
Код:
<!-- Block newpage module -->
<div class="block_newpage">
    {l s='New Page' mod='blocknewpage'}
</div>
<!-- /Block newpage module -->

теперь необходимо прописать хук в самом шаблоне smarty и передать через переменную, назовем ее к примеру, HOOK_NEWPAGE. Эту переменную затем можно использовать в нашем файле шаблона: мой сайт/themes/мой шаблон/cms.tpl , которая отвечет за отображение новой страницы. Тут я столкнулся с трудностями, везде пишут вставить перменную в нужном месте. Но где это место для несведующего человека в програмировании не ясно. Я подсмотрел расположение перменной HOOK_HEADER в фале header.tpl и сделал аналогично с нашей перменной в фале cms.tpl (а вообще эксперементировать не надо боятся, если вы учитесь на виртуальном хосте):
Код:
{if isset($cms) && $cms->id != $cgv_id}
    {include file="$tpl_dir./breadcrumb.tpl"}
{/if}
{if isset($cms) && !isset($category)}
    {if !$cms->active}
        <br />
        <div id="admin-action-cms">
            <p>{l s='This CMS page is not visible to your customers.'}
            <input type="hidden" id="admin-action-cms-id" value="{$cms->id}" />
            <input type="submit" value="{l s='Publish'}" class="exclusive" onclick="submitPublishCMS('{$base_dir}{$smarty.get.ad}', 0)"/>            
            <input type="submit" value="{l s='Back'}" class="exclusive" onclick="submitPublishCMS('{$base_dir}{$smarty.get.ad}', 1)"/>            
            </p>
            <div class="clear" ></div>
            <p id="admin-action-result"></p>
            </p>
        </div>
    {/if}
    <div class="rte{if $content_only} content_only{/if}">
        {$cms->content}
    </div>
    {$HOOK_NEWPAGE}
{elseif isset($category)}
    <div>
        <h1>{$category->name|escape:'htmlall':'UTF-8'}</h1>
        {if isset($sub_category) & !empty($sub_category)}    
            <h4>{l s='List of sub categories in '}{$category->name}{l s=':'}</h4>
            <ul class="bullet">
                {foreach from=$sub_category item=subcategory}
                    <li>
                        <a href="{$link->getCMSCategoryLink($subcategory.id_cms_category, $subcategory.link_rewrite)|escape:'htmlall':'UTF-8'}">{$subcategory.name|escape:'htmlall':'UTF-8'}</a>
                    </li>
                {/foreach}
            </ul>
        {/if}
        {if isset($cms_pages) & !empty($cms_pages)}
        <h4>{l s='List of pages in '}{$category->name}{l s=':'}</h4>
            <ul class="bullet">
                {foreach from=$cms_pages item=cmspages}
                    <li>
                        <a href="{$link->getCMSLink($cmspages.id_cms, $cmspages.link_rewrite)|escape:'htmlall':'UTF-8'}">{$cmspages.meta_title|escape:'htmlall':'UTF-8'}</a>
                    </li>
                {/foreach}
            </ul>
        {/if}
    </div>
{else}
    {l s='This page does not exist.'}
{/if}
<br />

Затем узнаем, что за часть вывода информации в нужном нам месте отвечает контроллер FrontController (FrontController.php), его то мы и перезагрузим, но не полностью а только публичную функцию displayHeader, которая отвечает за присвоение переменных шаблонизатору Smarty. Как это сделать я подглядел на сайте Orsa, и больше нигде не видел, за что ему большое спасибо. Итак создаем файл FrontController.php(это можно сделать Notepad++) и записываем туда такой код:
Код:
<?php

class FrontController extends FrontControllerCore
{
    public function displayHeader()
    {
        self::$smarty->assign(array(
            
            'HOOK_NEWPAGE' => Module::hookExec('newpage')));
            parent::displayHeader();
    }
}

Затем этот файл помещаем в папку : мой сайт\override\classes\ он и будет пергружать публичную функцию displayHeader
Теперь остается установить новый модуль и прикрепить модуль к новому хуку newpage, для этого заходим в бэк офисе в раздел Модули->Позиции->Расположить модули. В открывающемся списке выбираем наш модуль Blocknewpage и ниже в списке находим наш хук Hook New Page.
Через карту сайта находим нашу новую страницу и открывам её, должно выводится сообщение New Page.
И этим хуком можно теперь пользоваться, например, изменить хук Home в модуле текстового редактора на хук newpage, сделать это можно аналогично выше описанному примеру с соц закладками.
Удачной практики. Готовый модуль и файл cms.tpl для стандартной темы Prestashop прилагаю
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
Ответить Новая тема Новый опрос 
Всего: 9 1 2 3 4 5 > »