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,41 @@
<?php namespace Winter\Tester\Components;
use Cms\Classes\ComponentBase;
class Archive extends ComponentBase
{
public function componentDetails()
{
return [
'name' => 'Blog Archive Dummy Component',
'description' => 'Displays an archive of blog posts.'
];
}
public function defineProperties()
{
return [
'posts-per-page' => [
'description' => 'This will set the posts to display per page',
'default' => 10
],
'page-number-param' => [
'description' => 'The router parameter for getting the pagination page number',
'default' => 'pageNum'
]
];
}
public function posts()
{
return [
['title' => 'Lorum ipsum', 'content' => 'Post Content #1'],
['title' => 'La Playa Nudista', 'content' => 'Second Post Content']
];
}
public function onTestAjax()
{
$this->page['var'] = 'page';
}
}

View File

@@ -0,0 +1,33 @@
<?php namespace Winter\Tester\Components;
use Cms\Classes\ComponentBase;
use Cms\Classes\CodeBase;
class Categories extends ComponentBase
{
public function __construct(?CodeBase $cmsObject = null, $properties = [])
{
parent::__construct($cmsObject, $properties);
}
public function componentDetails()
{
return [
'name' => 'Blog Categories Dummy Component',
'description' => 'Displays the list of categories in the blog.'
];
}
public function posts()
{
return [
['title' => 'Lorum ipsum', 'content' => 'Post Content #1'],
['title' => 'La Playa Nudista', 'content' => 'Second Post Content']
];
}
public function onTestAjax()
{
$this->page['var'] = 'page';
}
}

View File

@@ -0,0 +1,42 @@
<?php namespace Winter\Tester\Components;
use Cms\Classes\ComponentBase;
use Cms\Classes\CodeBase;
use Winter\Tester\Classes\Users;
class Comments extends ComponentBase
{
private $users;
public function __construct(?CodeBase $cmsObject = null, $properties = [], ?Users $users = null)
{
parent::__construct($cmsObject, $properties);
$this->users = $users;
}
public function componentDetails()
{
return [
'name' => 'Blog Comments Dummy Component',
'description' => 'Displays the list of comments on a post.'
];
}
public function posts()
{
return [
['title' => 'Lorum ipsum', 'content' => 'Post Content #1'],
['title' => 'La Playa Nudista', 'content' => 'Second Post Content']
];
}
public function onTestAjax()
{
$this->page['var'] = 'page';
}
public function getUsers()
{
return $this->users;
}
}

View File

@@ -0,0 +1,23 @@
<?php namespace Winter\Tester\Components;
use Cms\Classes\ComponentBase;
class ContentBlock extends ComponentBase
{
public function componentDetails()
{
return [
'name' => 'Content Block Dummy Component',
'description' => 'Displays a editable content block.'
];
}
public function onRender()
{
if ($output = $this->property('output')) {
return 'Custom output: '.$output;
}
return 'Pass';
}
}

View File

@@ -0,0 +1,19 @@
<?php namespace Winter\Tester\Components;
use Cms\Classes\ComponentBase;
class MainMenu extends ComponentBase
{
public function componentDetails()
{
return [
'name' => 'Menu Dummy Component',
'description' => 'Displays a really cool menu.'
];
}
public function menuItems()
{
return ['Home', 'Blog', 'About', 'Contact'];
}
}

View File

@@ -0,0 +1,24 @@
<?php namespace Winter\Tester\Components;
use Cms\Classes\ComponentBase;
class Post extends ComponentBase
{
public function componentDetails()
{
return [
'name' => 'Blog Post Dummy Component',
'description' => 'Displays a blog post.'
];
}
public function defineProperties()
{
return [
'show-featured' => [
'description' => 'Display the post featured image or not',
'default' => true
]
];
}
}

View File

@@ -0,0 +1,4 @@
<h4>DEFAULT MARKUP: Menu</h4>
<ul>
{% partial __SELF__ ~ "::items" items=__SELF__.menuItems %}
</ul>

View File

@@ -0,0 +1,3 @@
{% for item in items %}
<li>DEFAULT: {{ item }}</li>
{% endfor %}

View File

@@ -0,0 +1 @@
<p>DEFAULT MARKUP: I am a post yay</p>