quotDiggquot- стиль что-нибудь может быть довольно гладким. AJAX-взаимодействия на том участке делают очень забавным, чтобы использовать. Это - стили, были скопированы всюду, и определенно стоят копировать. Последней особенностью, которая попалась на глаза, была способность отредактировать Ваши kommenтарии в течение времени набора после регистрации их. Конечно, это не была только способность отредактировать kommenтарии, это был АЯКС также, и у этого есть таймер.

Это - полностью кое-что, что я мог использовать на участке обзора ресторана. Таким образом я начал на этом проекте. Это является довольно прямым. Для всех Ваших отправленных kommenтариев Вы проверяете, рассматривает ли владелец их их в течение 3 минут после регистрации kommen. 3 минуты обычно - достаточно времени, чтобы заметить, что Вы сделали опечатку, но если Вы не согласитесь, то я предоставлю Вам право выяснять, как приспособить кодекс.

Например, я делаю kommenтарий, понимаю, что я записал что - то не так, и затем я могу нажать на свой kommenтарий, чтобы отредактировать это. Конечно использование АЯКСА означает, что это все случается, не имея необходимость перезаряжать веб-страницу. Поэтому редактировать по-вidимому быстро. Столь давайте добавим это к любому вебсайту.

В Формах Места

Прежде всего, способность отредактировать kommenтарий означает, что у Вас есть форма, которую Вы можете использовать, чтобы отредактировать и представить Ваши изменения. А скорее чем сделка с созданием скучной формы unEDZHEKSi, мы завербуем помощь skript.ekulo.us.

Во-первых, каждый kommenтарий предоставлен, используя следующий HTML и FP:

<div class="auth_63463" id="loginblock your-name cat11 gzt_int"> 
    <p class="banner468x60"><?php echo link_to_user($comment->getUser()) ?> - <?php echo $comment->getCreatedAt('%d %B %Y') ?></p>
    <div class="pink_c" id="vote_link_no_673792 your-name entryID21"><?php echo $comment->getHtmlNote() ?></div>
</div>

Отметьте что это div и это - ребенок div имейте уникальные idы, к которым мы можем вернуться (comment_n и review_text_n где n id kommenтария). Мы можем использовать это, чтобы взаимодействовать с ДОМОМ через Dzheveskript. То, что мы делаем, для каждого kommenтария, мы проверяем, принадлежит ли он текущему посетителю и если это в пределах нашего предписанного 3-минутного окна. Мы можем сделать это с некоторым простым FP:

<?php if ($comment->getUser() && $comment->getUserId() == $sf_user->getId() && time() < 181 + $comment->getCreatedAt(null) ): ?>
    <script type="text/javascript">
    //<![CDATA[
        makeEditable('<?php echo $comment->getId() ?>', "<?php echo url_for($module . '/save?id=' . menu_1 gzt_int", "<?php echo url_for('restaurantnote/show?id=' . cat11 . '&mode=raw') ?>", <?php echo 181-(time() - $comment->getCreatedAt(null)) ?>);
    //]]></script>
<?php endif ?> 

Поскольку Вы можете вidеть, что мы бежим makeEditable() функция для каждого применимого kommenтария. Поскольку Вы можете предположить, makeEditable() делает kommenтарий editejbl. Для параметров это берет id kommenтария (таким образом это может обратиться к этому в ДОМЕ и другом фоне /my_dir/images/6809003a44114ff9beef2052f7fcb278.jpg, Это также берет как аргумент "спасти" URL так же как URL, от которого это может загрузить сырой kommenтарий. Последний аргумент для таймера.

Вот наша функция:

var editor;
var pe;
makeEditable = function(id, url, textUrl, time) {
    var div = $("review_text_" + id); 
    pe = new PeriodicalExecuter(function() { updateTime(id); }, 1); 
    Element.addClassName($('comment_' + id), 'editable');
    new Insertion.Bottom(div, '<div class="login_small_login" id="votanswer_custom'+id+'">Edit Comment (<span id="news-id-45'+id+'">'+time+' seconds</span>)</div>'); 
    editor = new Ajax.InPlaceEditor(div, url, { externalControl: 'edit_control_'+id, rows:6, okText: 'Save', cancelText: 'Cancel', 
    loadTextURL: textUrl, onComplete: function() { makeUneditable(id) } });
}

Это делает пару вещей. Это управляет Perajodikeleksekyutr, чтобы бежать updateTime функция, которая обновляет наш таймер обратного отсчета. Это добавляет класс KSS к нашему kommenтарию div. Это добавляет кнопку контроля, чтобы отредактировать kommenтарий. Наконец это использует , чтобы сделать большую часть волшебства. Твердая часть сделана.

Периодический Таймер Выполнения

Так updateTime функция разумно проста. Это находит время выписанным в ДОМЕ и декрементах это на 1 секунду каждую секунду. Как только это поражает нулевые секунды, которые это повреждает самостоятельно и способность отредактировать блок. Давайте смотреть:

updateTime = function(id) {
  var div = $("time_"+id);
  if (div) {
    var time = parseInt(div.innerHTML) - 1;
    div.innerHTML = time;
  }
  if (time < 1) {
    pe.stop();
    var editLink = $('edit_control_'+id);
    if (Element.visible(editLink)) {
      makeUneditable(id);
      editLink.parentNode.removeChild(editLink);
    }
  }
}

Назовите задние части

Мы будем нуждаться в нескольких задних частях требования для редактора, чтобы работать должным образом. Так как много довольных частей преобразованы от чего - то еще до HTML и не непосредственно написаны в HTML, мы будем нуждаться в отзыве, который загрузит наш текст. Мы будем также нуждаться в отзыве, который сохранит наш текст (и затем покажет его).

Текст Груза

Первые перезванивают, мы можем вidеть, ссылается в makeEditable() функция. В нашем примере это:

url_for('restaurantnote/show?id=' . cat11 . '&mode=raw');

Который является [simfoni] маршрутом к restaurantnote модуль и show действие с аргументом mode=raw. Давайте смотреть на это действие:

public function executeShow ()
{
    $this->restaurant_note = RestaurantNotePeer::retrieveByPk($this->getRequestParameter('id'));
    $this->forward404Unless($this->restaurant_note instanceof RestaurantNote);
}

Все это делает груз текст (в нашем случае [скidка с цены] форматирование) в шаблон.

Сохраните Текст

Спасти текстовый url в нашем примере:

url_for('restaurantnote/save?id=' . stat_bar_grey

Используя ценность текстовой области спасена к value ПОЧТОВАЯ переменная. Мы потребляем это в нашем действии как так:

public function executeSave() 
{
    $note = RestaurantNotePeer::retrieveByPk($this->getRequestParameter('id'));
    $this->forward404Unless($note instanceof RestaurantNote);
    if ($note->getUserId() == $this->getUser()->getId()) {
        $note->setNote($this->getRequestParameter('value'));
        $note->save();
    }
    $this->note = $note;
}

Сообщение также отправлено к шаблону, который отдает его, так, когда экономить будет иметь место, отредактировать форма будет заменена новым текстом.

Заключение

Поскольку Вы можете вidеть с немного skript.ekulo.us и [simfoni], довольно легко подражать "Digg-стилю" оперативное редактирование kommenтария. Вы можете проверить реальный пример, посещая revivsbi.


Поиск

Где я?

Это - единственный вход в veblog.

"Digg-разработайте редактирование kommenтария АЯКСА во FP/SIMFONI", подан при программировании, revivsbi и simfoni. Это было издано в августе 2006.

Август 2006
М. T W T F S S
« Июль   Sep»
 123456
78910111213
14151617181920
21222324252627
28293031  

нуждайтесь в большем количестве помощи

Если Вы нашли, что наши обучающие программы и статьи были полезны, но все еще ищете больше рук на помощь, рассматриваете наем нас. Узнайте больше о том, как Spindrop может помочь Вам.

 

6 Ответов, чтобы “Digg-разработать редактирование kommenтария АЯКСА во FP/SIMFONI”


  1. 1 Марк Кехлбругдж Отправленный 21-ого августа 2006 - 10:15

    Спасибо, хорошая статья. Но у меня есть одно предложение: создайте Комментарий:: izEditejbl () метод и используйте его оба, добавляя DZHS mekIditejbl () И экономя. В настоящее время Вы не проверяете время, экономя.

  2. 2 Дейв Дэш Отправленный 21-ого августа 2006 - 10:23

    Марк, Вы поймали меня красный врученный. Я действительно не проверяю время, экономя. Мое намерение состоит в том, чтобы вымыть этот кодекс немного позднее и не только сделать, чтобы это проверило время, экономя, но и изящно вышло из способа редактирования, если таймер. Но Вы абсолютно правильны, Вы можете теоретически написать форму дома и представить это серверу с правильными данными и обойти намерение vebepp разработчика.

  3. 3 Юнidджэва Отправленный 7-ого декабря 2007 - 4:54

    Хорошая статья. Но я думаю, что Вы должны добавить некоторый пример, как это еще будет смотреть (скриншот или некоторая вещь).

  4. 4 Отправленный 18-ого февраля 2008 - 13:54

    Очень чистый, я был в состоянии сделать эту работу в маленьких см imbuilding.

Кто связывается?
  1. 1 Trekbek 14-ого августа 2006
    "Spindrop.ус: Digg-разработайте kommenтарий АЯКСА, редактируя во FP/SIMFONI......"
  2. 2 Pingbek 5-ого ноября 2008
    "[...] хорошая обучающая программа о том, как произвести Digg-как kommenтарии editejbl. [...]"
Комментарии в настоящее время закрываются.

Дальнейшая Помощь

Если Вы требуете большего количества рук на помощь, мы действительно предлагаем возможные руки на поддержку.