【发布时间】:2020-09-28 12:30:21
【问题描述】:
我有这个标准的产品标题:“品牌名称 - 商品标题”,我需要像这样转换这个字符串:
品牌名称
项目标题
所以我需要处理两件事:将字符串中的第一个破折号替换为“br”,并将粗体应用于第一个破折号之前的文本。
这段代码我只达到了目标的第一部分:
<a class="product-item-link primabold-category" href="<?php echo $_product-> getProductUrl() ?>">
<?php echo str_replace(' - ', '<br />', $_helper->productAttribute($_product, $_product->getName() , 'name')); ?></a>
还有这个 CSS:
.primabold-category::first-line { font-weight: 900; font-size: 14px; letter-spacing: 0px;}
但结果并不像预期的那样,因为它只“加粗”了第一行,即使破折号之前的文本在两行上也是如此..
这里是一个真实的标题示例:
POLO RALPH LAUREN - 牛津 azzurro 的 Camicia donna
预期结果:
马球拉尔夫劳伦
Camicia donna in Oxford azzurro
正如您从picture 中看到的,当我在移动端查看时,“lauren”在第二行并且不是粗体:(
--> 我找到了一个符合预期结果的javascript:
<a class="ProductList-title primabold-category" style="font-weight: 100;">Polo ralph lauren - T-shirt oudspeaker</a> <script> function changeBrandName() { var prodList = document.querySelectorAll("a.primabold-category"); for (var i = 0; i < prodList.length; i++) { var text = prodList[i].innerText; var index = text.indexOf('-'); var lower = text.substring(0, index); var higher = text.substring(index + 1); prodList[i].innerHTML = lower.bold() + '<br />' + higher; } } changeBrandName(); </script>
但是在分层导航加载新产品线的任何时候都不会触发 javascript,所以我认为如果可能的话,使用 PHP 将是完美的解决方案。
【问题讨论】:
-
所以在标题前输出一个
<strong>标签,并将其中的-替换为</strong><br />...? (并再次删除 CSS,::first-line将无法正常工作,如果您不能一开始就强制第一部分位于单行上。) -
@04FS,只要文本的其余部分没有
-。 -
@NigelRen 是的,好点。如果这需要仅限于仅替换第一次出现的
-,而str_replace本身无法做到这一点,stackoverflow.com/questions/1252693 有办法处理。