feat: VivesPOS landing on Winter CMS 1.2 — theme + plugin + Dockerfile
Some checks are pending
Module sub-split / Sub-split (push) Waiting to run

- Base: wintercms/winter branch 1.2 (full framework)
- Theme vivespos: Canvas 7 + Bootstrap 5 CDN, custom CSS
- Layout: deferred GTM/GA4 tracking, JSON-LD SoftwareApplication
- Partials: hero (offline-first), features, modes (offline/nube toggle),
  screenshots, pricing (3 planes), comparison, FAQ, CTA
- Plugin VivesPOS.Site with ContactForm
- Dockerfile: PHP 8.2 Apache, port 80, healthcheck
- Added winter/wn-pages, blog, sitemap, seo plugins
- Active theme set to vivespos
This commit is contained in:
2026-08-21 19:29:00 -06:00
commit 1f72193a64
3266 changed files with 531480 additions and 0 deletions

View File

@@ -0,0 +1,22 @@
<?php Block::put('breadcrumb') ?>
<?= $this->makeLayoutPartial('breadcrumb') ?>
<?= $this->formRenderRecordNavigation() ?>
<?php Block::endPut() ?>
<?php if (!$this->fatalError): ?>
<div class="layout fancy-layout">
<?= Form::open([
'id' => $this->formGetId(),
'class' => 'layout',
'data-change-monitor' => 'true',
'data-window-close-confirm' => 'true',
]) ?>
<div class="layout-row">
<?= $this->formRender() ?>
</div>
<?= Form::close() ?>
</div>
<?php else: ?>
<p class="flash-message static error"><?= e($this->fatalError) ?></p>
<p><a href="<?= isset($formConfig) ? Backend::url($formConfig->defaultRedirect) : 'javascript:history.back()' ?>" class="btn btn-default"><?= e(trans('backend::lang.form.return_to_list')); ?></a></p>
<?php endif ?>

View File

@@ -0,0 +1,42 @@
<?php Block::put('breadcrumb') ?>
<?= $this->makeLayoutPartial('breadcrumb') ?>
<?= $this->formRenderRecordNavigation() ?>
<?php Block::endPut() ?>
<?php if (!$this->fatalError): ?>
<?php Block::put('form-contents') ?>
<div class="layout">
<div class="layout-row">
<?= $this->formRenderOutsideFields() ?>
<?= $this->formRenderPrimaryTabs() ?>
</div>
<div class="form-buttons p-t">
<?= $this->formMakePartial('toolbar') ?>
</div>
</div>
<?php Block::endPut() ?>
<?php Block::put('form-sidebar') ?>
<div class="hide-tabs"><?= $this->formRenderSecondaryTabs() ?></div>
<?php Block::endPut() ?>
<?php Block::put('body') ?>
<?= Form::open([
'id' => $this->formGetId(),
'class' => 'layout stretch',
'data-change-monitor' => 'true',
'data-window-close-confirm' => 'true',
]) ?>
<?= $this->makeLayout('form-with-sidebar') ?>
<?= Form::close() ?>
<?php Block::endPut() ?>
<?php else: ?>
<div class="control-breadcrumb">
<?= Block::placeholder('breadcrumb') ?>
</div>
<div class="padded-container">
<p class="flash-message static error"><?= e(trans($this->fatalError)) ?></p>
<p><a href="<?= isset($formConfig) ? Backend::url($formConfig->defaultRedirect) : 'javascript:history.back()' ?>" class="btn btn-default"><?= e(trans('backend::lang.form.return_to_list')); ?></a></p>
</div>
<?php endif ?>

View File

@@ -0,0 +1,24 @@
<?php Block::put('breadcrumb') ?>
<?= $this->makeLayoutPartial('breadcrumb') ?>
<?= $this->formRenderRecordNavigation() ?>
<?php Block::endPut() ?>
<?php if (!$this->fatalError): ?>
<?= Form::open([
'id' => $this->formGetId(),
'class' => 'layout',
'data-change-monitor' => 'true',
'data-window-close-confirm' => 'true',
]) ?>
<div class="layout-row">
<?= $this->formRender() ?>
</div>
<div class="form-buttons p-t">
<?= $this->formMakePartial('toolbar') ?>
</div>
<?= Form::close() ?>
<?php else: ?>
<p class="flash-message static error"><?= e($this->fatalError) ?></p>
<p><a href="<?= isset($formConfig) ? Backend::url($formConfig->defaultRedirect) : 'javascript:history.back()' ?>" class="btn btn-default"><?= e(trans('backend::lang.form.return_to_list')); ?></a></p>
<?php endif ?>

View File

@@ -0,0 +1,53 @@
<div class="form-buttons loading-indicator-container">
<!-- Save -->
<a
href="javascript:;"
class="btn btn-primary wn-icon-save save"
data-request="onSave"
data-browser-validate
data-load-indicator="<?= e(trans('backend::lang.form.saving')) ?>"
data-request-before-update="$el.trigger('unchange.oc.changeMonitor')"
data-request-data="redirect:0"
data-hotkey="ctrl+s, cmd+s"
>
<?= e(trans('backend::lang.form.save')) ?>
</a>
<!-- Save and Close -->
<a
href="javascript:;"
class="btn btn-primary wn-icon-check save"
data-request-before-update="$el.trigger('unchange.oc.changeMonitor')"
data-request="onSave"
data-browser-validate
data-load-indicator="<?= e(trans('backend::lang.form.saving')) ?>"
>
<?= e(trans('backend::lang.form.save_and_close')) ?>
</a>
<?php if ($formModel->url): ?>
<!-- Preview -->
<a
href="<?= e($formModel->url) ?>"
target="_blank"
class="btn btn-primary wn-icon-crosshairs"
data-control="preview-button"
>
<?= e(trans('backend::lang.form.preview')) ?>
</a>
<?php endif ?>
<a class="btn btn-default wn-icon-ban" href="<?= $this->actionUrl('') ?>"><?= e(trans('backend::lang.form.cancel')); ?></a>
<!-- Delete -->
<button
type="button"
class="btn btn-default empty wn-icon-trash-o"
data-request="onDelete"
title="<?= e(trans('backend::lang.form.delete')); ?>"
data-load-indicator="<?= e(trans('backend::lang.form.deleting')); ?>"
data-request-before-update="$el.trigger('unchange.oc.changeMonitor')"
data-request-confirm="<?= e(trans('backend::lang.form.confirm_delete')); ?>"
data-control="delete-button"
></button>
</div>