Maksoft.net




  • Събития, презентации, обучения организирани от Максофт. Изложения с участието на Максофт. 

    Хронология на събитията свързани с интернет решения, графичен дизайн и развитие на бизнеса.

    ...

    Събития
    Начало /  / ...


  • Feed API предоставя JSON достъп до съдържанието на Maksoft CMS за външни приложения, сайтове и интеграции. Позволява четене на данни от таблици, филтриране, сортиране и ограничаване на достъпа според нивото на потребителя.

    Основен формат

    https://maksoft.net/feed/{table_name}?{параметри}
    или
    https://maksoft.net/feed/{site_id}/{table_name}?{параметри}
    

    Общи параметри

    Параметър Тип / Формат Описание Пример
    limit integer Максимален брой записи (по подразбиране 50, максимум 10000) limit=100
    offset integer Брой записи за прескачане (пагинация) offset=200
    debug 0 / 1 Активира debug режим и показва SQL заявката debug=1
    order_by string Поле, по което се сортира резултатът order_by=date_modified
    order_dir ASC / DESC Посока на сортиране order_dir=DESC
    site_id integer Идентификатор на сайта (ако не е зададен в URL) site_id=2

    Филтриране на резултатите (WHERE)

    API-то поддържа динамично филтриране на резултатите чрез URL параметри. Всички филтри се интерпретират като SQL WHERE условия.

    Оператор Описание Пример
    = Точно съвпадение status=1
    > По-голямо от preview>100
    < По-малко от id<500
    >= По-голямо или равно preview>=1000
    <= По-малко или равно views<=5000
    != / <> Различно от status!=0
    ~ Текстово съвпадение (LIKE %value%) title~Новини

    Операторите могат да бъдат част от името на параметъра (preview>100) или да са URL-кодирани (preview%3E100).

    Сортиране

    ?order_by=date_modified&order_dir=DESC

    Може да бъде дефинирано и в mapping конфигурацията:

    {
      "order": {
        "field": "sort_n",
        "direction": "ASC"
      }
    }
    

    Изчисляеми полета (Computed Fields)

    "computed": {
      "url": "feed_pageurl(n)",
      "lastmod": "feed_date('Y-m-d', date_modified)"
    }
    

    Тези функции се дефинират във feed.safe.func.php и се прилагат автоматично при извеждането на данните.

    Изключване на полета

    "fields_to_exclude": ["PageURL", "phpvars"]

    Позволява изключване на определени колони от резултата.

    Контрол на достъпа

    "access_filter": "pages.SecLevel <= {ACCESS_LEVEL}"

    Ограничава достъпа според нивото на потребителя ($o_page->_user['AccessLevel']).

    Примери

    /feed/pages
    /feed/pages?status=1
    /feed/pages?preview>100
    /feed/pages?title~услуги
    /feed/pages?order_by=date_modified&order_dir=DESC
    /feed/pages?debug=1
    

    Примерен JSON отговор

    {
      "meta": {
        "table": "pages",
        "site_id": 2,
        "limit": 50,
        "offset": 0,
        "count": 2,
        "access_level": 0,
        "result": "ok",
        "debug_sql": "SELECT * FROM `pages` WHERE `SiteID`=2 ..."
      },
      "data": [
        {
          "n": "2",
          "name": "Начало",
          "url": "https://www.maksoft.bg/",
          "lastmod": "2025-07-26"
        }
      ]
    }
    

     

    ...

    feed api слой за екпорт
    Начало /  /  / Документация...


  • Инсталацията под Windows на Maksoft CMS изисква инсталация на Laragon или XAMPP (за Apache и MySQL), сваляне на PHP файловете от github.com/maksoftnet/ms, импорт на база данни maksoft.sql, инсталиране на зависимостите с composer. 

    Основно процесът преминава през

    • инсталация на локален apache сървър Xampp или Laragon
    • git clone https://github.com/maksoftnet/ms
    • composer инсталация на зависимостите в директории
      /ms composer install
      /modules composer install 

       

    • инсталация на mysql, създаване на база maksoft, импорт на база данни
      mysql -u root maksoft < maksoft.sql
    • създаване на потребител maksoft с парола XXX за работа с базата и задаване на права All Privileges
    • настройка на някои инициализиращи променливи  

     

    my.ini

    [mysqld]

    max_allowed_packet = 2048M

    tmp_table_size=256M

    max_heap_table_size=256M

    net_read_timeout = 600

    net_write_timeout = 600

    innodb_buffer_pool_size=512M

     

    php.ini

    memory_limit = 512M

    max_execution_time = 300

    post_max_size = 512M

    upload_max_filesize = 512M

     

     

    ...

    Инсталация на maksoft cms
    Начало /  /  / Документация...


  • Версия 4.0 превръща Maksoft CMS от мултисайт система за управление на интернет сайтове в глобална мрежа за управление и разпространение на информация в интернет между различни платформи. 

    MBT (Model - Business - Transport) архитектура. 

    Платформата се изгражда на Node.Js + Type Script. 

    Това е централната система, която приема, обработва, архивира и дистрибутира данни между:

    • локални CMS (Maksoft CMS 1.0 до 3.0, WordPress, PrestaShop)

    • складов софтуер и доставчици
    • социални мрежи

    • външни API-та

    • платежни услуги
    • мобилни приложения

    Тя предоставя REST API, Webhooks, cron задачи и съхранява данните едновременно в свързани релационна PostgreSQL и нерелационна MongoDB бази данни или в S3-совместимо хранилище.

    PostgreSQL е структурираното ядро, а MongoDB е динамичното, специфично разширение.

    Как работи тази комбинация на практика:

    Действие PostgreSQL MongoDB
    Създаване на нова страница pages таблица
    Добавяне на WooCommerce еквивалент връзка platform_links platformData документ
    Импорт от PrestaShop products таблица допълнителни атрибути в JSON
    Социална активност или log събитие

    logs колекция в MongoDB

    Как се изгражда архитектурно?

    • Всички базови данни са в PostgreSQL (включително page_id)

    • MongoDB пази „разширения“ по page_id (или external_ref)

    • Business слоят решава кога да ползва едното или другото

    • REST/GraphQL API-то ги агрегира при нужда

     

    ...

    maksoft cms 4.0
    Начало /  /  / Документация...


  • За импорт на даннните е нужно да разрешите на MySQL в my.ini импорт на големи пакети, да създадем БД maksoft като команда за импорт mysql -u root maksoft < maksoft.sql и да дадем права на потребител maksoft за достъп от скрипт. 

    Създайте база данни (БД) maksoft. 
    Създайте потребител maksoft с достъп до БД maksoft

    Задайте избраната парола за достъп в конфигурационния файл lib/config.php

    ...
    public $db_user_upl = 'maksoft';
    public $db_pass_upl = 'Избраната парола';
    ...

    След това може да импортирате (seed) реална база или само структурата. 

    АК импортиране база и данни, базата данни ще бъде голяма и препоръката е maksoft.sql да се инсталира чрез команден ред. Предварително в 

    MySQL конфигурация

    C:/xampp/mysql/bin/my.ini

    трябва да разрешим големи пакети 

     

    [mysqld]

    max_allowed_packet = 2048M

    tmp_table_size=256M

    max_heap_table_size=256M

     

    След това от CommandShell (cmd) стартиран като Administrator отидете в папка
    cd c:/xampp/mysql/bin/mysql
    изпълнете: 

    mysql -u root maksoft < maksoft.sql

    Изчакайте. Процесът може да отнеме време повече от 10 минути.

    Прогреса можете да следите в phpMyAdmin 

    ...

    mysql конфигурация и импорт на данни
    Начало /  /  / Документация / ...


  • Инсталация на PHP платформата 
    git clone https://github.com/maksoftnet/ms

    Изпълнете клонирането от работната папка на Xampp c:/xampp/htdocs. 

    След края на клонирането ще имате папка  c:/xampp/htdocs с Maksoft CMS. 

     

    ...

    Инсталация на maksoft cms от github
    Начало /  /  / Документация / ...


  • Бързината на сайта вече е ключов фактор за SEO оптимизация. С новия сървърен кеш в Maksoft CMS, страниците се зареждат до 5 пъти по-бързо и поемат 20+ пъти повече трафик. Това повишава рейтинга в Google и подобрява потребителското изживяване – особено при кампании и пикова посещаемост.

    Ново ниво в SEO чрез кеширане

    Новата функционалност кешира всяка често посещавана страница за период от 5 минути. Това позволява на следващите потребители да я заредят почти мигновено, без допълнително натоварване върху сървъра. Резултатът: по-бърз сайт, по-добри позиции и по-висока SEO ефективност.

    Какво подобрява кеширането?

    • По-високи позиции в Google благодарение на ускорено време за зареждане.
    • Нисък bounce rate – посетителите остават по-дълго на сайта.
    • Поддържане на трафик в пикови моменти, включително кампании и новини.
    • Оптимизация на ресурси без компромис със съдържанието.

    Съвместно действие с MemCache и CDN

    Сървърният кеш се комбинира с MemCache, който управлява динамичните компоненти на сайта, и клауд CDN кеширане, което осигурява светкавична скорост за глобалните потребители. Това дава предимство пред конкуренцията при SEO оптимизация на сайтове с голям трафик.

    Как да видите ефекта?

    Излезте от административен режим и отворете често посещавана страница – ще забележите моментално по-бързо зареждане. В административен режим кеширането е изключено, за да работите винаги с най-актуалното съдържание.

    Какво предстои?

    Целта е постигане на над 99.99% uptime при всякакво натоварване. Това е решаващ компонент от цялостната SEO оптимизация стратегия, особено при активно развиващи се сайтове с голямо съдържание и рекламна активност.

    Какво да направите за максимален ефект?

    Поискайте оферта за Външна Google SEO оптимизация на интернет сайт с Фейсбук Трафик Фуния!

    Това ще допълни вътрешната сайт оптимизация на Вашия сайт с органичен линк билдинг- връзки създадени към Вашия сайт от други сайтове и социални мрежи. Нещо повече- това ще сподели актуалната информация от Вашия сайт в социални мрежи- Фейсбук, което привлича нови клиенти и има косвен ефект за Вашите позиции в Гугъл. 

    Повече информация, инструмент за планиране на ключови думи и цени има ТУК

    ...

    5х по-бърз сайт за seo с нов кеш от maksoft cms
    Начало /  /  /  / ...


  • Laragon или Xampp са наличните сървъри, които ще ви създадат локална работна среда под Windows или iOS. 

    Инсталирайте Laragon от Laragon.org 

    Инсталирайте XAMPP от- www.apachefriends.org/

    Инсталация на XAMPP включва работна среда apache2 и MySQL нужна за работа с Maksoft CMS. 

    Стандартно се инсталира на c:/xampp като при наличие на стара версия следва да преименувате старата папка, защото ще я създаде отново. 

    ...

    xampp или laragon Инсталация с apache и mysql
    Начало /  /  / Документация / ...


  • Нужни са 2 метода, за да вмъкнете CSS, JS, HTML или PHP логика без да променяте ядрото. Hook системата в Maksoft CMS използва $o_page обекта и централен execution layer, който обединява legacy и modern архитектурата в един pipeline.

    Как работи Hook системата

    $o_page->add_hook() регистрира callback функция към конкретна hook точка. $o_page->hook() изпълнява всички регистрирани функции по ред. ThemeRuntime зарежда legacy данните и регистрира default hook-ове. Системата използва един page object и един asset registry.

    Автоматично налични hook-ове

    • main_content – рендерира page content
    • pageurl – включва legacy PageURL
    • css – управлява CSS assets
    • js – управлява JS assets
    • html_before и html_after – съдържание около <main>

    ThemeRuntime като bridge слой

    ThemeRuntime::boot() инициализира hook средата. Той регистрира main_content и pageurl. Темата не включва PageURL директно. Разработчикът работи само с $o_page->hook() и $o_page->render_assets(). Това означава, че темата остава presentation слой. Не се пипа ядро, не се дублира pipeline, не се създават втори execution механизми.

    Интеграция на Block система

    BlockResolver чете активните блокове от базата. Системата генерира CSS, HTML и JS чрез същите hook точки. Блоковете използват съществуващия hook execution layer. Грешната архитектура води до конфликт на assets, трудно обновяване и проблеми с поддръжката. Централизираната hook система предотвратява това.

    ...

    Хукове (hooks)
    Начало /  /  / Документация...


  • Максофт е основа на headless CMS система. Целта на новия рендерер на теми е да осигури лесна адаптация и визуализация на сайтове, създадени както за legacy Maksoft CMS, така и за нови дизайни и теми, писани за Maksoft CMS, WordPress, Joomla и други системи.

    Темите работят върху стандартизиран слой от данни (ViewData), предоставен от CMS. Темата не комуникира директно с базата данни или CMS класове.

    Създаването на нова тема започва със създаване на директория в /themes/ms/... и записване на основния index.php файл в нея.

    index.php зарежда engine bootstrap файла /themes/ms/_bootstrap.php, получава готовите ViewData променливи и използва предоставения обект $o_page за достъп до CMS hooks.

    Темата се регистрира в CMS чрез запис в таблица Templates. Това я прави достъпна за конкретен сайт (SiteID) или за всички сайтове (SiteID = 0).

    CSS/JS активите се управляват централизирано чрез cms_assets.php, което предотвратява дублиране на зависимости и осигурява контрол на версиите.


    /themes – Official Theme Architecture Spec (v1.4)

    1. Цел на директорията /themes

    /themes е стандартният слой за рендериране на Maksoft CMS.

    • Съдържа теми, групирани по engine / renderer.
    • Осигурява споделени helpers и assets на ниво engine.
    • Позволява темите да работят със стандартизиран ViewData слой.

    /themes не заменя legacy /Templates, а съществува паралелно с него за backward compatibility.


    2. Основен принцип

    CMS подава ViewData → Theme engine рендерира → Theme определя структурата
    • Темите не четат директно база данни.
    • Темите не инстанцират CMS класове.
    • Темите не съдържат бизнес логика.
    • Темите рендерират подадените данни.

    3. Основна ViewData структура

    view
     ├ context
     ├ auth
     ├ user
     ├ user_context
     ├ site
     ├ page
     │   └ streams
     │       ├ main
     │       │   └ items[]
     │       └ subpages
     │           └ items[]
     └ theme

    streams.main.items съдържа основните content blocks на страницата.

    streams.subpages съдържа relation stream с подстраниците. Темата решава къде да го визуализира.


    4. Йерархия на директориите

    /themes
        /ms
        /wp
        /joomla

    Всеки engine определя:

    • формата на ViewData;
    • helpers;
    • asset registry;
    • render conventions;
    • default blocks и components.

    5. Engine-level структура: /themes/ms

    /themes/ms
        _bootstrap.php
        theme.json
        cms_assets.php
        functions.php
    
        /helpers
            block_dom.php
            meta_tags.php
            footer_inc.php
            breadcrumbs.php
    
        /blocks
            text.php
            image.php
    
        /components
            menu.php
            navigation.php
            subpages.php
    
        /base
            theme.json
            /none
                theme.json
                index.php
                meta_tags.php
                footer_inc.php
    
                /blocks
                    text.php
                    image.php
    
                /components
                    menu.php
                    navigation.php
                    subpages.php
    
                /layout
                    head.php
                    header.php
                    footer.php
                    scripts.php
    
                /partials
                    menu.php
                    breadcrumbs.php
                    banners.php
    
                /assets
                    /css
                    /js
                        theme.js
                        /blocks
                            text.js
                            image.js
                        /components
                            subpages.js
                    /images
    
                README.md

    6. Blocks

    Blocks са основните content елементи на страницата.

    Те се намират в:

    $page['streams']['main']['items']

    Всеки block съдържа:

    [
        'id'   => 1,
        'type' => 'text',
        'data' => [...],
        'dom'  => [
            'data-block'    => 'text',
            'data-id'       => '1',
            'data-editable' => '0'
        ]
    ]

    Blocks се рендерират чрез:

     

    BlockResolver чете $page['streams']['main']['items'], намира подходящия template и връща HTML.

    Block template resolution

    theme/blocks/{pageType}/{block}.php
    theme/blocks/{block}.php
    themes/ms/blocks/{pageType}/{block}.php
    themes/ms/blocks/{block}.php

    7. Components

    Components са визуални елементи, които не са задължително част от основния body content.

    Примери:

    • menu;
    • navigation;
    • breadcrumbs;
    • subpages;
    • banners;
    • footer elements.

    Components позволяват на темата да контролира къде точно се рендерира даден елемент.


    8. Subpages contract

    Subpages не се добавят автоматично в streams.main.items.

    Официалният source за подстраници е:

    $page['streams']['subpages']

    Примерна структура:

    $page['streams']['subpages'] = [
        'id'      => 'children',
        'name'    => 'subpages',
        'kind'    => 'relation',
        'binding' => 'strong',
        'role'    => 'subpages',
        'display' => [
            'enabled'  => 1,
            'layout'   => 'auto',
            'columns'  => 3,
            'elements' => ['image', 'title', 'excerpt'],
            'links'    => 'full',
            'limit'    => null,
            'order'    => 'manual'
        ],
        'items' => [...]
    ];

    Темата рендерира subpages чрез:

     

    Това позволява на темата да избере дали подстраниците да се покажат:

    • след основния текст;
    • преди основния текст;
    • в отделна секция;
    • в sidebar;
    • в slider;
    • в grid/gallery зона.

    Default renderer-ът за subpages се намира в:

    /themes/ms/components/subpages.php

    Темата може да го презапише чрез:

    theme/components/subpages.php

    9. Main content и subpages

    main_content и sub_pages са отделни render hooks.

    Препоръчителна структура в тема:

    <main>
        <?= $o_page->hook('main_content') ?>
        <?= $o_page->hook('phpcode') ?>
        <?= $o_page->hook('sub_pages') ?>
        <?= $o_page->hook('pageurl') ?>
    </main>

    Така темата запазва контрол върху реда и мястото на отделните секции.


    10. DOM Integration

    CMS добавя стандартни DOM markers:

    data-block
    data-id
    data-editable

    DOM markers се генерират чрез helper:

    block_dom($block)

    Пример:

    <section<?= block_dom($block) ?>>
        ...
    </section>

    Резултат:

    <section data-block="text" data-id="1" data-editable="0">
        ...
    </section>

    DOM markers са официалният JS API между CMS и темата.


    11. JavaScript lifecycle

    Темите могат да инициализират JS поведение чрез DOM markers.

    document.querySelectorAll("[data-block]").forEach(function(el) {
        var type = el.getAttribute("data-block");
    
        if (window.Theme && Theme.blocks && typeof Theme.blocks[type] === "function") {
            Theme.blocks[type](el);
        }
    });

    Пример:

    window.Theme = window.Theme || {};
    Theme.blocks = Theme.blocks || {};
    
    Theme.blocks.text = function(el) {
        console.log("Text block init", el.getAttribute("data-id"));
    };

    За components може да се използва отделен namespace:

    window.Theme = window.Theme || {};
    Theme.components = Theme.components || {};
    
    Theme.components.subpages = function(el) {
        console.log("Subpages component init", el.getAttribute("data-id"));
    };

    12. Assets

    Assets се управляват на две нива.

    Engine-level

    /themes/ms/cms_assets.php

    Дефинира споделени зависимости:

    • Bootstrap;
    • Tailwind;
    • Alpine;
    • Core JS runtime;
    • общи component styles.

    Theme-level

    theme/assets/css
    theme/assets/js
    theme/assets/images

    Темите не трябва да enqueue-ват assets директно в templates. Те използват asset registry и hooks.


    13. Theme configuration: theme.json

    theme.json е незадължителен конфигурационен файл. CMS използва overwrite cascade.

    Използва се първият намерен theme.json, тръгвайки от директорията на темата нагоре.

    /themes/ms/base/none/theme.json
    /themes/ms/base/theme.json
    /themes/ms/theme.json
    /themes/theme.json

    14. Maksoft Template Language (MTL)

    Maksoft Template Language (MTL) е compatibility и extension слой върху стандартните PHP templates.

    MTL позволява legacy PHP include файлове като edit.php, PageURL и phpCode да декларират JavaScript, CSS и други embedded code blocks без да нарушават нормалното PHP изпълнение.

    MTL не заменя PHP. Legacy Maksoft CMS PHP остава валиден execution layer.

    Directive marker

    <!-- @push('js') -->
    <script>
    $j(document).ready(function(){
        // Legacy JavaScript code
    });
    </script>
    <!-- @endpush -->

    MTL-aware engine премества този блок към:

     

    Asset declaration

    <!-- @asset('jquery') -->
    <!-- @asset('jquery-alias-j') -->
    <!-- @asset('fancybox') -->

    Engine behavior:

    $o_page->add_asset('jquery');
    $o_page->add_asset('jquery-alias-j');
    $o_page->add_asset('fancybox');

    15. Theme development checklist

    • Създайте директория в /themes/ms/....
    • Добавете index.php.
    • Заредете /themes/ms/_bootstrap.php.
    • Използвайте $o_page->hook('main_content') за основните blocks.
    • Използвайте $o_page->hook('sub_pages'), ако темата трябва да показва подстраници.
    • Добавете block overrides в /blocks само за основни content blocks.
    • Добавете component overrides в /components за menu, navigation, subpages и други relation/render components.
    • Използвайте block_dom($block) за DOM markers.
    • Инициализирайте JS чрез Theme.blocks и/или Theme.components.

    16. Key principles

    • Single page object: $o_page.
    • CMS управлява data layer.
    • Theme управлява HTML и визуализацията.
    • Blocks са част от streams.main.items.
    • Subpages са отделен relation stream: streams.subpages.
    • Theme контролира layout и позициониране.
    • DOM markers са JS integration API.
    • Page cache кешира крайния HTML.

    17. Theme runtime flow

    HTTP Request
          ↓
    page.php
          ↓
    loader.php
          ↓
    $o_page->init_page_blocks()
          ↓
    PageData
          ↓
    ThemeMapper
          ↓
    ViewData
          ↓
    resolveTheme()
          ↓
    include theme/index.php
          ↓
    $o_page->hook('main_content')
          ↓
    BlockResolver
          ↓
    block templates
          ↓
    $o_page->hook('sub_pages')
          ↓
    Subpages component renderer
          ↓
    HTML output
          ↓
    page cache

    18. Status

    • Version: v1.4
    • Change: ViewData streams contract, BlockResolver, Components, Subpages relation stream, DOM helper.
    • Backward compatible: Да.
    • Runtime cost: минимален.

    Основният принцип остава:

    CMS управлява данните → Theme управлява HTML и визуализацията
    ...

    Създаване на теми (темплейти)
    Начало /  /  / Документация...


Максофт е дигитална агенция със собствени продукти за изработка, поддръжка, SEO оптимизация и маркетинг на интернет сайтове от 1999 година. Ние сме SEO фирма със собствени продукти и услуги за управление на съдържание, SEO оптимизация, дигитален маркетинг и реклама на фирми от различни браншове.  

Максофт има над 25 години опит в печатна и интернет реклама. Компанията е водещ вносител на рекламни материали



Следвайте ни

Запитване

Maksoft.Bg Maksoft.Net BrandIT