. */ class CFDBShortCodeContentParser { const BEFORE_START_DELIMITER = '{{BEFORE}}'; const BEFORE_END_DELIMITER = '{{/BEFORE}}'; const AFTER_START_DELIMITER = '{{AFTER}}'; const AFTER_END_DELIMITER = '{{/AFTER}}'; /** * @param $content string * @return array[$before, $template, $after] */ public function parseBeforeContentAfter($content) { $before = null; $startDelimiter = self::BEFORE_START_DELIMITER; $endDelimiter = self::BEFORE_END_DELIMITER; $startDelimiterStartPos = strpos($content, $startDelimiter); $endDelimiterStartPos = strpos($content, $endDelimiter); if ($startDelimiterStartPos !== false && $endDelimiterStartPos !== false && $startDelimiterStartPos < $endDelimiterStartPos) { $startDelimiterEndPos = $startDelimiterStartPos + strlen($startDelimiter); $endDelimiterEndPos = $endDelimiterStartPos + strlen($endDelimiter); $before = substr($content, $startDelimiterEndPos, $endDelimiterStartPos - $startDelimiterEndPos); $content = substr($content, $endDelimiterEndPos, strlen($content) - $startDelimiterEndPos); } $after = null; $startDelimiter = self::AFTER_START_DELIMITER; $endDelimiter = self::AFTER_END_DELIMITER; $startDelimiterStartPos = strpos($content, $startDelimiter); $endDelimiterStartPos = strpos($content, $endDelimiter); if ($startDelimiterStartPos !== false && $endDelimiterStartPos !== false && $startDelimiterStartPos < $endDelimiterStartPos) { $startDelimiterEndPos = $startDelimiterStartPos + strlen($startDelimiter); $after = substr($content, $startDelimiterEndPos, $endDelimiterStartPos - $startDelimiterEndPos); $content = substr($content, 0, $startDelimiterStartPos); } return array($before, $content, $after); } }