Concrete5 - уникальный блок на каждой странице

У меня есть блок, который отображает количество кликов на странице, на которой он установлен.

Я хочу отображать этот блок на каждой странице.

Я попытался создать stack, а затем включить этот стек в глобальную область. Проблема в том, что когда стек включен, он включает один и тот же блок на каждой странице.

Таким образом, вместо того, чтобы иметь разные блоки на каждой странице, у меня есть один и тот же блок на каждой странице. Это приводит к подсчету кликов на всех страницах, а не только на текущей.

Как я могу включить блок на каждой странице, но каждый из них имеет уникальный ID, как при добавлении вручную?

Спасибо.


person XCS    schedule 18.08.2013    source источник


Ответы (1)


Невозможно иметь уникальный блок на каждой странице, не добавляя его вручную. Даже если вы сделаете его «типом страницы по умолчанию», вы получите общий идентификатор блока, пока не сделаете первое редактирование (после чего он получит свой собственный идентификатор). И если вы жестко закодируете PHP-код страницы, у нее вообще не будет идентификатора блока.

При этом я не знаю, зачем вам нужен уникальный идентификатор блока. Очевидно, что каждая страница будет иметь уникальный идентификатор. Таким образом, ваш блок должен иметь возможность хранить клики (я не уверен, что именно вы имеете в виду здесь, но это, вероятно, не имеет значения) по идентификатору страницы (идентификатор коллекции на языке c5) и извлекать его также по нему.

Изменить: Принимая во внимание ваш комментарий и исходя из моего понимания того, что вы пытаетесь сделать, нет никаких причин, по которым вы не можете комбинировать идентификатор блока (который, как вы говорите, будет дублироваться во всех страницы, но будут отличаться для каждого блока на странице) и ID страницы. Таким образом, если вы поместите два блока в стек, они получат идентификаторы 1 и 2. Они будут иметь идентификаторы 1 и 2 на каждой странице, которой владеет стек. Поэтому, когда вы пытаетесь «записать» любые данные, которые они производят, вы комбинируете bID с cID, чтобы получить 1-103, 2-103, 1-4719 и т. д.

Редактировать 2: Итак, если ваша трудность заключается не столько в том, чтобы «вводить» данные, а в том, чтобы физически хранить данные, см. комментарий jordanlev ниже. Вы не будете использовать таблицу $btTable, так как она отключена от bID. Вместо этого вы будете использовать db.xml для создания новой таблицы, которая может принять ваш новый ключ и любые другие данные, которые вы хотите сохранить. Затем вы несете ответственность за запрос и обновление его с помощью Loader::db(). См. его блок или блок «опроса» ядра для примеров того, как управлять собственной таблицей БД.

person James S    schedule 18.08.2013
comment
Спасибо за ответ. Я сказал количество кликов, чтобы упростить чтение вопроса, на самом деле я делаю что-то еще. Как я могу реализовать блок так, чтобы он извлекал данные на основе страницы, но также имел возможность размещать несколько блоков на одной странице? Если я получаю только на основе идентификатора страницы, я не могу иметь несколько блоков на странице. - person XCS; 20.08.2013
comment
Ну, вопрос, возможно, было легче читать, но сложнее помочь вам, не зная точно, что вы пытаетесь сделать.... Итак, вы хотите иметь возможность прикрепить блок к странице несколько раз (либо в стеках или типах страниц по умолчанию, но не в коде), и вы хотите иметь возможность настраивать/регистрировать/дифференцировать/что угодно каждый из этих экземпляров блока отдельно? Комбинация идентификатора блока и идентификатора страницы сделает это. Смотрите мою правку. - person James S; 20.08.2013
comment
Да, но вопрос не в том, как получить данные, а в том, как их сохранить? Я имею в виду, откуда я могу взять 1-103 и 1-4719, упомянутые в вашем редактировании? Каждый блок имеет только одну строку в базе данных, как я могу хранить дополнительные данные? Например: сохранить значение bID и pageID X. Кажется, мне как-то нужно вставить новую строку, содержащую эти два ключа (bID и pageID) и значение X. - person XCS; 20.08.2013
comment
Похоже, вы пытаетесь сохранить внешние данные (количество кликов) во внутренней таблице блока (той, которая указана в переменной $btTable контроллера блока). Вместо этого вы можете поместить блок в пакет, а затем создать единую таблицу для всего пакета (определенную в файле db.xml пакета, а не в файле db.xml блока) и хранить там данные о кликах. В качестве примера того, как что-то подобное работает, посмотрите мой бесплатный аддон для подписки на список рассылки — tinyurl.com/78yr825. - у него есть таблица отправки на уровне пакета для хранения всех отправленных форм в одном месте. - person Jordan Lev; 21.08.2013