Files
studiobeve.no/application/views/pages/includes/beauty-form-hu.php
T
UbuntuandClaude Opus 5 5c30467fbd Add massage as a third vertical, driven by a config registry
Introduces /massage alongside barber and beauty: landing page, booking
flow, admin support, home tile and SEO entries, in all three languages.

Architecture
- application/config/verticals.php + vertical_helper.php: one registry
  entry per vertical (branding, assets, views, behaviour flags). A fourth
  vertical is a config entry plus content files.
- Strangler: barber and beauty keep pointing at their existing view files,
  so their rendered HTML is unchanged. Only massage uses the new generic
  pages/vertical-*.php and includes/vertical-*.php views, which collapse
  the four duplicated per-language nav/footer branches into one.
- Pages::vertical() + one route; booking(), booking_finished(),
  _booking_error() and manage_booking() are now registry-driven.

Worker/vertical coupling
- getActiveWorkers() derives the vertical from services.service_category_id
  instead of the workers.is_barber / is_beauty flags, which were a
  hand-maintained cache of exactly that fact. Verified against production
  data: the derived set reproduced the stored flags for every worker, in
  both verticals. No schema change was needed for massage.
- The legacy flags are now written through from the category so a rollback
  cannot strand a new worker, and the admin worker UI shows the derived
  verticals read-only instead of two dropdowns that controlled nothing.

Bug fixes found along the way (all pre-existing)
- booking_process() had no server-side category guard; cross-vertical
  mixing was prevented only by client-side JS.
- add-service-form / add-worker-form emitted `selected` on every category
  option, so the newest category silently became the default.
- update-service-form offered only barber/beauty, so editing a service of
  any other type silently rewrote it.
- getWorkerScheduleByDay ignored schedule overrides while getAvailableTimes
  honoured them, so slots could be shown and then rejected. Added an
  override-aware getWorkerScheduleForDate() and used it in both guards.
- Booking lists dereferenced a null service if one had been hard-deleted.
- main.css: .tiles was tuned for exactly two tiles, including an
  absolutely-positioned .style1 at the 1280px breakpoint.

Massage-specific behaviour, opt-in per vertical
- strip_category_prefix: grouped service lists show "50 min" under the
  treatment heading rather than repeating the full name. The full name is
  carried in data-service-name so the totals panel stays unambiguous, and
  services.service_name is untouched for emails and admin.
- single_service_booking: one treatment per booking, enforced in the UI and
  in booking_process(). Re-clicking the selection releases it.
- Displayed treatment time (50/80/110 min) is in the service name; the
  booked slot (60/90/120 min) is service_time and covers changing and
  payment. service_time is never shown to the guest.

DB migrations for dev/prod are in documents/ - additive only, no ALTER.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-13 16:34:47 +00:00

320 lines
17 KiB
PHP
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!-- Banner -->
<section id="banner">
<img src="<?php echo base_url();?>assets/img/beauty/banner.jpg" style="width: 100%;" />
<!--div class="inner">
<h2>Ipsum dolore</h2>
<p>Amet lorem ipsum consequat feugiat</p>
</div-->
</section>
<section id="mobil-menu">
<div class="mobil-menucont">
<ul>
<li class="mobil-menu-book"><a href="<?php echo SITEURL;?>hu/booking/beauty">IDŐPONTFOGLALÁS</a></li>
<li class=""><a href="https://www.facebook.com/studiobevebeauty" class="icon brands fa-facebook-f"><span class="label">Facebook</span></a></li>
<li class=""><a href="https://www.instagram.com/studio.beve.beauty/" class="icon brands fa-instagram"><span class="label">Instagram</span></a></li>
</ul>
</div>
</section>
<!-- About Us -->
<section id="aboutus" class="wrapper style1">
<div class="container">
<div class="inner">
<header class="major">
<img src="<?php echo base_url();?>assets/img/beauty/ollo_rose.png">
<h2>Rólunk</h2>
</header>
<div class="bemutatkozas">
<div class="bem-bal">
<p>
Bence Evelin vagyok a Studio Beve vezetője és megálmodója. Fontosnak
tartom, hogy a vendégek a nálunk töltött idő alatt – egy kicsit megpihenve a világ zajától – feltöltődjenek, és kívül-belül egszépülve térjenek vissza a mindennapokhoz.
</p>
<p>
A minőségi idő, a maximális figyelem, a legprofesszionálisabb eszközök, a
hivatástudattal és szakértelemmel karöltve jelentik a filozófiánk és
szolgáltatásaink alapjait.
</p>
<p>
Hiszem, hogy a szépség, a divat és a trend nem nemhez kötött, így nálunk
lehetőség van arra, hogy mindenki egy helyen szépülhessen nemtől függetlenül.
A Barber, Beauty és Masszázs részlegeink között pedig megtalálhatjátok a számotokra
megfelelő szolgáltatásokat.
</p>
<p>
Közel 10 éves szépségipari, és közte több éves nemzetközi tapasztalattal
elérkezettnek láttam az időt, hogy megnyissam saját stúdiómat itt
Trondheimben, az Innheredsveien 92 szám alatt, ahol a vendégeknek lehetősége
van ingyenes parkolásra is a kezelések időtartama alatt.
</p>
<p>
Extra öröm számomra, hogy egy olyan tradicionális helyet sikerült találnom,
ahol az 50-es években már szépségszalon működött, ennek köszönhetően a
hagyományt, modern környezetben lehetőségem van tovább vinni.
Szépülj velünk, szeretettel várunk.
</p>
</div>
<div class="bem-jobb">
<img src="<?php echo base_url();?>assets/img/evelin_beauty.JPG">
<h4>Bence Evelin <br> <span>Tulajdonos, Studio Beve</span></h4>
</div>
</div>
<div class="dolgozo-nev">
<hr>
<img src="<?php echo base_url();?>assets/img/beauty/evelin/evelin.jpg" class="dolgozo-kep">
<h4>EVELIN Bence <span>- szempilla- és szemöldök stylist, sminkes</span></h4>
</div>
<div class="bemutatkozas-dolgozo">
<div class="bem-dolgozo-bal">
<p>
"A szakma iránti vonzalmam, szeretetem már kisgyerekként megmutatkozott.
Először saját magamon, majd később a barátnőimen sajátítottam el a sminkelés
alapjait. Felnőttként pedig nem volt kérdés, hogy mi is az én utam. Kozmetikusi
tanulmányaimat 2016-ban fejeztem be és ugyanebben az évben szempillaépítő
képesítést is szereztem.
</p>
<p>
Mindig törekedtem - és mai napig törekszem - arra, hogy a vendégeimnek minél
teljeskörűbb szolgáltatást tudjak nyújtani. Ezért kiemelt figyelmet fordítok a
továbbképzésekre. Oktatóim között megtalálhatóak többszörös magyar bajnok
sminkmesterek vagy épp sminktetoválók.
</p>
<p>
A legújabb szenvedélyem a sminktetoválások készítése. Ma már a
csúcstechnológia és a professzionális alapanyagok használata lehetővé teszi,
hogy természetes, egyénre szabott megjelenést biztosíthassak a vendégeimnek.
A portfóliómban lévő szolgáltatásoknál a természetes irányt képviselem, legyen
szó sminkről, sminktetoválásról vagy épp műszempilláról.
</p>
<p>
Büszke vagyok arra, hogy az évek alatt elégedett vendégek boldog mosolyát
zárhattam a szívembe, szülőhazámban Ukrajnában, majd Magyarországon.
Szintén örömmel tölt el, hogy noha még csak 2023 áprilisától élek Norvégiában,
mégis sikerül a vendégeimmel jó kapcsolatot kialakítani, a közös időt jó
hangulatban eltölteni. A varázslatos norvég nyelv elsajátítására is nagy
hangsúlyt fektetek, hogy a vendégeimmel, az anyanyelvükön tudjak beszélgetni.
</p>
<p>
Hiszem, hogy a folyamatos fejlődés, a minőségi munka és az odaadás segít,
hogy napról-napra jobb szakember lehessek."
</p>
</div>
<div class="bem-dolgozo-jobb">
<img src="<?php echo base_url();?>assets/img/beauty/evelin/1.jpg">
<img src="<?php echo base_url();?>assets/img/beauty/evelin/2.jpg">
<img src="<?php echo base_url();?>assets/img/beauty/evelin/3.jpg">
<img src="<?php echo base_url();?>assets/img/beauty/evelin/4.jpg">
<img src="<?php echo base_url();?>assets/img/beauty/evelin/5.jpg">
<img src="<?php echo base_url();?>assets/img/beauty/evelin/6.jpg">
</div>
</div>
<!-- Ngoc-->
<div class="dolgozo-nev">
<hr>
<img src="<?php echo base_url();?>assets/img/beauty/kateryna/kateryna.jpg" class="dolgozo-kep">
<h4>KATERYNA Kravchenko <span>- Műkörömépítő</span></h4>
</div>
<div class="bemutatkozas-dolgozo">
<div class="bem-dolgozo-bal">
<p>
A nevem Kateryna Kravchenko, 22 éves vagyok, Ukrajnából származom, és egy éve élek Norvégiában. Jelenleg körömtechnikusként dolgozom a Studio Beve AS-ben.
</p>
<p>
A körmök iránti érdeklődésem már gyermekkoromban elkezdődött – imádtam lakkozni a körmeimet, és amikor édesanyám ezt észrevette, beíratott egy körmös tanfolyamra. Ettől kezdve ez vált a szenvedélyemmé és a hivatásommá.
</p>
<p>
2019 óta dolgozom körmösként, és a manikűrre, erősítésre és körömdizájnra specializálódom. Imádom a minimalizmust, és nagyra értékelem a tiszta, precíz és minőségi munkát – a részletek teremtik meg a tökéletességet.
</p>
<p>
Nagyon szeretem a munkámat, és boldoggá tesz, hogy még szebbé tehetem a nők kezeit. Számomra a kényelem és a minőség kiemelten fontos, és mindig arra törekszem, hogy kellemes, nyugodt légkört teremtsek, ahol a vendégeim jól érzik magukat és gondoskodva vannak.
</p>
<p>
Figyelem a trendeket, folyamatosan tanulok új technikákat, és imádok fejlődni, hogy minden kezelésem a lehető legmagasabb színvonalat képviselje.
</p>
</div>
<div class="bem-dolgozo-jobb">
<img src="<?php echo base_url();?>assets/img/beauty/kateryna/1.jpg">
<img src="<?php echo base_url();?>assets/img/beauty/kateryna/2.jpg">
<img src="<?php echo base_url();?>assets/img/beauty/kateryna/3.jpg">
<img src="<?php echo base_url();?>assets/img/beauty/kateryna/4.jpg">
<img src="<?php echo base_url();?>assets/img/beauty/kateryna/5.jpg">
<img src="<?php echo base_url();?>assets/img/beauty/kateryna/6.jpg">
</div>
</div>
</div>
<!-- end Ngoc-->
</div>
</div>
</section>
<!-- Treatments -->
<section id="treatments" class="wrapper style2">
<div class="container">
<div class="inner">
<header class="major">
<img src="<?php echo base_url();?>assets/img/beauty/ollo_rose.png">
<h2 class="nyitva">Szolgáltatások</h2>
</header>
</div>
<div class="service-block">
<div class="service-area">
<div class="one-third service-part1">
<div class="service-inner">
<div class="service service1">
<div class="service-text service-text1">
<div class="service-icon icon1"></div>
<div class="service-content">
<div class="main-title">Gyanta</div>
<div class="sub-title-serv">kar, láb, orr intim gyanta</div>
</div>
</div>
<div class="service-text service-text2">
<div class="service-icon icon2"></div>
<div class="service-content">
<div class="main-title">Smink</div>
<div class="sub-title-serv">nappali, alkalmi, esküvői smink</div>
</div>
</div>
<div class="service-text service-text3">
<div class="service-icon icon3"></div>
<div class="service-content">
<div class="main-title">Szempillaépítés</div>
<div class="sub-title-serv">klasszikus, dupla, újratöltés</div>
</div>
</div>
</div>
</div>
</div>
<div class="one-third service-part2">
<div class="service-inner">
<div class="service service2">
<a href="#" class="banner-anchor"><img src="<?php echo base_url();?>assets/img/service-banner-beauty.png" alt="service-banner1" class="banner-image1"></a>
</div>
</div>
</div>
<div class="one-third service-part3">
<div class="service-inner">
<div class="service service3">
<div class="service-text service-text1">
<div class="service-icon icon1"></div>
<div class="service-content">
<div class="main-title">Szemöldök tetoválás</div>
<div class="sub-title-serv">puderes szemöldöktetoválás</div>
</div>
</div>
<div class="service-text service-text2">
<div class="service-icon icon2"></div>
<div class="service-content">
<div class="main-title">Műköröm</div>
<div class="sub-title-serv">hamarosan..</div>
</div>
</div>
<div class="service-text service-text3">
<div class="service-icon icon3"></div>
<div class="service-content">
<div class="main-title">Szemöldök és szempilla</div>
<div class="sub-title-serv">szemöldök laminálás, formázás és festés</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- One -->
<section id="one" class="wrapper style1">
<div class="container">
<div class="inner">
<header class="major">
<img src="<?php echo SITEURL;?>assets/img/beauty/ollo_rose.png">
<h2>Árlista</h2>
</header>
<?php
$prevousCategory = '';
if(is_array($services)){
foreach($services as $serviceItem){
if($serviceItem->service_category != $prevousCategory){
?>
<div class="prices-category" style="width: 100%">
<h4><?php echo $serviceItem->service_category;?></h4>
</div>
<?php
}
?>
<div class="one-half">
<div class="category-content">
<div class="category-text-left">
<div class="main-title"><a><?php echo $serviceItem->service_name;?></a></div>
<div class="sub-title"><?php echo $serviceItem->service_description;?></div>
</div>
<div class="category-text-right">
<div class="price">kr <?php echo $serviceItem->service_price;?></div>
</div>
</div>
</div>
<?php
$prevousCategory = $serviceItem->service_category;
}
}
?>
</div>
</div>
</section>
<!-- Two -->
<section id="two" class="wrapper style2">
<div class="container">
<div class="inner">
<header class="major">
<img src="<?php echo SITEURL;?>assets/img/beauty/ollo_rose.png">
<h2 class="nyitva">Nyitvatartási idő</h2>
<h4>Ingyenes parkolás a szolgáltatások ideje alatt</h4>
</header>
</div>
<div class="nyitvatartas">
<div class="about-content">
<div class="about-text-left">
<div class="title">Hétköznap</div>
</div>
<div class="about-text-right">
<div class="time">10:00 - 18:00</div>
</div>
</div>
<div class="about-content">
<div class="about-text-left">
<div class="title">Szombat</div>
</div>
<div class="about-text-right">
<div class="time">10:00 - 16:00</div>
</div>
</div>
<div class="about-content">
<div class="about-text-left">
<div class="title">Vasárnap</div>
</div>
<div class="about-text-right">
<div class="closed">Zárva</div>
</div>
</div>
</div>
</div>
</section>