1

好的,我正在为 opencart 创建一个 vqmod 扩展,我需要向管理页面添加一个字段。管理页面有一个带有引导元素的表单,如下所示:

<div class="form-group">
  <label class="col-sm-2 control-label" for="input-keyword"><span data-toggle="tooltip" title="<?php echo $help_keyword; ?>"><?php echo $entry_keyword; ?></span></label>
  <div class="col-sm-10">
    <input type="text" name="keyword" value="<?php echo $keyword; ?>" placeholder="<?php echo $entry_keyword; ?>" id="input-keyword" class="form-control" />
    <?php if ($error_keyword) { ?>
    <div class="text-danger"><?php echo $error_keyword; ?></div>
    <?php } ?>
  </div>
</div>
<div class="form-group">
  <label class="col-sm-2 control-label" for="input-bottom"><span data-toggle="tooltip" title="<?php echo $help_bottom; ?>"><?php echo $entry_bottom; ?></span></label>
  <div class="col-sm-10">
    <div class="checkbox">
      <label>
        <?php if ($bottom) { ?>
        <input type="checkbox" name="bottom" value="1" checked="checked" id="input-bottom" />
        <?php } else { ?>
        <input type="checkbox" name="bottom" value="1" id="input-bottom" />
        <?php } ?>
        &nbsp; </label>
    </div>
  </div>
</div>
<div class="form-group">
  <label class="col-sm-2 control-label" for="input-status"><?php echo $entry_status; ?></label>
  <div class="col-sm-10">
    <select name="status" id="input-status" class="form-control">
      <?php if ($status) { ?>
      <option value="1" selected="selected"><?php echo $text_enabled; ?></option>
      <option value="0"><?php echo $text_disabled; ?></option>
      <?php } else { ?>
      <option value="1"><?php echo $text_enabled; ?></option>
      <option value="0" selected="selected"><?php echo $text_disabled; ?></option>
      <?php } ?>
    </select>
  </div>
</div>

我需要告诉我的 vqmod XML 在“input-bottom”表单组之前添加一个表单组。我可以做这样的事情:

<search position="before"><![CDATA[<div class="form-group">
            <label class="col-sm-2 control-label" for="input-bottom"]]></search>

但这对我来说看起来很脆弱。如果标签类别发生变化或发生任何变化,它就会中断。那么有没有一种方法可以使用正则表达式或其他东西来查找<div class="form-group">“input-bottom”标签之前的内容,而不管 div 和标签的“for”属性之间的 HTML 是什么?

还是我看错了?有没有更好的方法来做我想做的事情?我对 opencart 和 vqmod 很陌生。

4

1 回答 1

0

所以我在stackoverflow上找到了这篇文章,它帮助我理解了前瞻中的否定集,并使用同一篇文章中的链接,我用这个在线测试器测试了这个正则表达式:

<div class="form-group">(?=[^\>]*?bottom)

<div class="form-group">只要单词“bottom”出现在下一个>符号之前,这就会匹配。这是我能想到的最好的了。

然后我在vqmod中尝试了它,发现它没有工作......在仔细检查vqmod的文档后,我了解到它只能搜索一行......

但是使用 vqmod 中的“偏移”属性,我能够做到这一点:

<search position="before" offset="1"><![CDATA[for="input-bottom"]]></search>
<add><![CDATA[my code]]></add>

它搜索具有 input-bottom 的行并将我的代码放在其上方 2 行,跳过该<div class="form-group">行。这对我有用。

于 2015-06-27T12:55:41.607 回答