1

OK、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>

「input-bottom」フォーム グループの前にフォーム グループを追加するよう vqmod XML に指示する必要があります。私はちょうどこのようなことをすることができます:

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

しかし、それは私にはかなり脆弱に見えます。ラベルのクラスなどを変更すると壊れてしまいます。<div class="form-group">では、div とラベルの「for」属性の間の HTML に関係なく、正規表現などを使用して「input-bottom」ラベルの直前を見つける方法はありますか?

それとも、私はこれをすべて間違って見ていますか?私がやろうとしていることを行うためのより良い方法はありますか? 私はopencartとvqmodにかなり慣れていません。

4

1 に答える 1

0

そこで、stackoverflow でこの投稿を見つけて、先読みで否定されたセットを理解するのに役立ち、同じ投稿のリンクを使用して、このオンライン テスターでこの正規表現をテストしました。

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

これは、単語「bottom」が次のシンボル<div class="form-group">の前にある限り一致します。>それは私が理解できる最高のものです。

それから vqmod で試してみたのですが、うまくいかないことに気付きました... vqmod のドキュメントを詳しく調べたところ、1 行しか検索できないことがわかりました...

しかし、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 に答える