From a24a06002081ad71a78ffeff9072725ba39cf121 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Tue, 17 Feb 2026 20:05:31 +0000
Subject: [PATCH] =minor changes, particularly around the JVB_CHILD_URL pattern

---
 inc/meta/Meta.php |   34 ++++++++++++++++++++++++++++++++++
 1 files changed, 34 insertions(+), 0 deletions(-)

diff --git a/inc/meta/Meta.php b/inc/meta/Meta.php
index 1316684..f7a35b4 100644
--- a/inc/meta/Meta.php
+++ b/inc/meta/Meta.php
@@ -276,6 +276,11 @@
 	 */
 	public function get(string $name): mixed
 	{
+		// Handle repeater subfield path
+		if (str_contains($name, ':')) {
+			return $this->getByPath($name);
+		}
+
 		// Check computed fields first
 		if (isset($this->computed[$name])) {
 			return ($this->computed[$name])($this);
@@ -301,6 +306,11 @@
 	 */
 	public function set(string $name, mixed $value): self
 	{
+		// Handle repeater subfield path (e.g., "services:2:image")
+		if (str_contains($name, ':')) {
+			return $this->setByPath($name, $value);
+		}
+
 		$config = $this->item->getFieldConfig($name);
 
 		if (!$config) {
@@ -442,6 +452,30 @@
 		return new Repeater($this, $name);
 	}
 
+	protected function setByPath(string $path, mixed $value): self
+	{
+		$parts = explode(':', $path, 3);
+		if (count($parts) !== 3) {
+			return $this;
+		}
+
+		[$repeaterName, $rowIndex, $subField] = $parts;
+		$this->repeater($repeaterName)->setField((int) $rowIndex, $subField, $value);
+
+		return $this;
+	}
+
+	protected function getByPath(string $path): mixed
+	{
+		$parts = explode(':', $path, 3);
+		if (count($parts) !== 3) {
+			return null;
+		}
+
+		[$repeaterName, $rowIndex, $subField] = $parts;
+		return $this->repeater($repeaterName)->field((int) $rowIndex, $subField);
+	}
+
 	// ─────────────────────────────────────────────────────────────
 	// Utility Methods
 	// ─────────────────────────────────────────────────────────────

--
Gitblit v1.10.0