cytowanie selektywne

0

nie wiem, czy juz ktos o tym wspominal. jak cos, to usuncie ten watek.

w phpbb jest bardzo fajna opcja. gdy zaznaczymy kawalek postu i klikniemy buttonik, to w szybkiej odpowiedzi pojawi sie ten fragment postu. chyba nie trzeba tlumaczyc, ze jest to wielce przydatne

0

Dobry pomysł, a mi się widzi też coś z IPB: jest (np. obok przycisku Cytuj) przycisk Cytuj (hehe tak się złożyło, po prostu w IPB w miejscu przycisku Cytuj, który obecnie jest na Coyocie, jest Odpisz ;)) i można go odznaczać/zaznaczać (domyślnie odznaczony) i jak się weźmie w Odpowiedz to te posty, które zostały tam zaznaczone są cytowane.

0

Jestem za. Kto wiec koduje w JS? :]

0

Ja mogę napisać skrypt .js, ale do was należy:

  • stworzenie obrazka wielokrotnego cytatu [bo cytuj przenosi do pisania odpowiedzi tylko z tym postem], a w zasadzie dwoch obrazkow => on i off (zeby pokazac ktory post zostal dodany do listy cytowanych).

  • obrazek powinien miec id w formacie "quote_" . $id_posta

PHP mogę naskrobać jeśli potrzeba ;-). Generalnie wygląda to następująco:

użytkownik naciska przycisk, id posta dodawane jest do ciasteczka coyote_quotes ktory czytany jest pozniej przez posting.php [uwaga! musi zostac najpierw odpowiednio wyczyszczony]

// edit, mam:

1: proponuje stworzyc plik common.js z nastepujacymi funkcjami, ktore obsluguja rozne sposoby pobierania elementow w przegladarkach jak i dodaja funkcjonalnosc typu in_array znane z PHP.

function get_object(objectid)
{
  if (document.getElementById)
  {
    return document.getElementById(objectid);
  }
  else if (document.all)
  {
    return document.all[objectid];
  }
  else if (document.layers)
  {
    return document.layers[objectid];
  }
  else
  {
    return null;
  }
}

function get_tags(tagsparent, tag)
{
  if (tagsparent == null)
  {
    return new Array();
  }
  else if (typeof tagsparent.getElementsByTagName != 'undefined')
  {
    return tagsparent.getElementsByTagName(tag);
  }
  else if (tagsparent.all && tagsparent.all.tags)
  {
    return tagsparent.all.tags(tag);
  }
  else
  {
    return new Array();
  }
}

function get_cookie(name)
{
  cookie_name = name + '=';
  cookie_length = document.cookie.length;
  cookie_begin = 0;
  while (cookie_begin < cookie_length)
  {
    value_begin = cookie_begin + cookie_name.length;

    if (document.cookie.substring(cookie_begin, value_begin) == cookie_name)
    {
      var value_end = document.cookie.indexOf(';', value_begin);

      if (value_end == -1)
      {
        value_end = cookie_length;
      }

      return unescape(document.cookie.substring(value_begin, value_end));
    }

    cookie_begin = document.cookie.indexOf(' ', cookie_begin) + 1;

    if (cookie_begin == 0)
    {
      break;
    }
  }
  return null;
}

function in_array(ineedle, haystack, caseinsensitive)
{
  var needle = new String(ineedle);

  if (caseinsensitive)
  {
    needle = needle.toLowerCase();
    for (var i in haystack)
    {
      if (haystack[i].toLowerCase() == needle)
      {
        return i;
      }
    }
  }
  else
  {
    for (var i in haystack)
    {
      if (haystack[i] == needle)
      {
        return i;
      }
    }
  }
  return -1;
}

2: sam kod odpowiedzialny za przyciski cytatów. powinno mieć id = "quote_" . $id_posta , a obrazki [kolejno aktywny i nieaktywny przycisk] quote_on i quote_off

function quotes_init(obj)
{
  var postid;
  var cookie_ids = get_cookie('coyote_quotes');

  cookie_ids = (cookie_ids != null && cookie_ids != '') ? cookie_ids.split(',') : new Array();

  var images = get_tags(obj, 'img');
  for (var i = 0; i < images.length; i++)
  {
    if (images[i].id && images[i].id.substr(0, 6) == 'quote_')
    {
      postid = images[i].id.substr(6);
      images[i].onclick = function(e)
      {
        return quote_click(this.id.substr(6));
      };
      switch_quote_img(postid, (in_array(postid, cookie_ids) > -1 ? true : false));
    }
  }
}

function quote_click(postid)
{
  var cookie_ids = get_cookie('coyote_quotes');

  var cookie_text = new Array();
  var selected = false;

  if (cookie_ids != null && cookie_ids != '')
  {
    cookie_ids = cookie_ids.split(',');

    for (i in cookie_ids)
    {
      if (cookie_ids[i] == postid)
      {
        selected = true;
      }
      else if (cookie_ids[i])
      {
        cookie_text.push(cookie_ids[i]);
      }
    }
  }

  switch_quote_img(postid, (selected ? false : true));

  if (!selected)
  {
    cookie_text.push(postid);
  }

  set_cookie('coyote_quotes', cookie_text.join(','));

  return false;
}

function switch_quote_img(postid, state)
{
  var quote_obj = get_object('quote_' + postid);

  quote_obj.src = (state == true) ? quote_obj.src.replace(/\/quote_off\.([a-zA-Z]+)$/, '/quote_on.$1') : quote_obj.src.replace(/\/quote_on\.([a-zA-Z]+)$/, '/quote_off.$1');
}

quotes_init(get_object('post-list'));

Tabela zawierajaca posty powinna miec tez id = "post-list"

0

To może analogicznie wyglądać tak:

Janek
</p>
To jest treść posta o id 118
'+document.getElementById('post118').innerHTML+'</quote>')">cytuj <form name="doc"> <textarea name="content" cols="50" rows="40"></textarea> </form> ``` Z podstawieniem wartości nie powinno być problemów. Jak chcesz Adam, mogę zająć się odpowiednim plikiem szablonu z cvs i zmodyfikować jakoś... tylko trzeba jeszcze ikonkę :)

// o wyprzedził mnie ze swoją propozycją

0

ciasteczko odradzam. Lepiej już dodawać nowe pole do formularza i w nim zapisywać fragmenty/id postu. Czemu ciasteczko odpada? Tematy otwieram w wielu zakładkach. Czytam jeden temat, oznaczam co chcę zacytować i klik w Odpowiedz. Tymczasem w drugim temacie robie to samo. Jeśli pojawi się jakiś lag, cytaty będą nietrafione.

0

Dziwny tok rozumowania. Dodajac pole hidden z id postow nie bedziesz mogl zacytowac wiadomosci znajdujacych sie na innej stronie tematu lub w calkiem innym watku co wyklucza przy okazji otwieranie nowego okna. Przy uzyciu ciastka mozesz zaznaczyc sobie posty z calego forum i kliknac "Odpowiedz" gdzie tylko chcesz, a posty ktore wybrales i tak zostana zacytowane. Po wyslaniu odpowiedzi cookie zostanie usuniete. Tyle.

edit: z reszta kolega prosil o funkcje jaka posiada IPB, a moje rozwiazanie odzwierciedla sposob wykorzystany zarowno tam jak i w vBulletin

0

No tak, ale w 99,9% przypadków nie ma potrzeby cytowania czegoś spoza tematu. Natomiast takie cytowanie silnie utrudnia życie, jeśli korzysta się z wielu zakładek i działa się tak jak ja - przeczytać wątek -> kliknąć w odpowiedź (tutaj z odpowiednimi cytatami) -> przejść do następnej zakładki -> ... -> napisać odpowiedź -> wysłać odpowiedź. A myślę, że wiele osób tak robi, bo to bardzo wygodne (nie trzeba czekać na ładowanie się strony).

Swoją drogą dużo wygodniejsza jest opcja szybkiego cytowania, taka jak w phpBB by Przemo.

P.S. A ja się zastanawiałem, dlaczego mi cytowanie na IPB nie działa, a to taka idiotyczna metoda stosowana jest i nic dziwnego :P

0

Cytowanie selektywne jeszcze nie bylo mi przydatne, natomiast wielokrotne cytowanie to rzeznicko przydatna rzecz.

W IPB niestety nie da sie zacytowac 2 postow z roznych stron jednego watku, gdyz zastosowane tam rozwiazanie jest z ukrytym polem formularza.

Natomiast ciacho moze utrudnic zycie bo ja tak jak nav zazwyczaj odpalam milion zakladek.

Pierwsze co przychodzi na mysl to ukryte pole ale przy przechodzeniu na inna strone danego watku przesylanie formularza postem.. jednak to bedzie wkurzalo, bo co chwila beda komunikaty w stylu "strona wygasla" (IE) i jej odpowiedniki na innych przegladarkach.

Mozna pomyslec o ciachu z id watku w nazwie aby nie przeszkadzaly sobie nazwzajem oraz dawac im np. godzine zycia aby nie tworzyc smietnika na kompie usera. Godzinka mysle jest optymalna nawet jak ktos otworzy wiele zakladek i wolno sobie przeglada.

Wydaje mi sie to najlepszym rozwiazaniem, aczkolwiek jest jeszcze inne, ktore jednak odradzam. przesylanie ajaxem aby php po stronie serwera zapisywal info (w bazie lub sesji) ale chyba nie chcemy bardziej zarzynac serwera, co? :>

[fajnie, ze cos sie dzieje z kojotem]

0

Hmm... Ale przecież korzystając z "szybkiej odpowiedzi" (czy mi się zdaje, czy to Ty byłeś jedną z osób, które najsilniej naciskały na jej wprowadzenie?) to właśnie cytowanie selektywne jest bardzo przydatne. Natomiast cytowanie wielokrotne wymaga otwarcia dodatkowej strony z odpowiedzią, z której ostatnimi czasy praktycznie nigdy nie korzystam.

0

ja nigdy z szybkiej odpowiedzi nie korzystałem ale teraz zacząłem i na normalną stronę z odpowiedzią już nie wchodzę praktycznie bo to serio bardzo wygodna rzecz.

co do tych ciastek to nie rozumiem, przecież wystarczy ciastko ustawić np o nazwie
cytuj93801 i zawartość "314702|312068|310408" i dodawać tak lub odejmować a lagi nic nie przeszkodzą bo każdy temat będzie miał własne ciastko (usuwane po wykorzystaniu - wejściu w odpowiedź)

// ło sorry, nie przeczytałem postu Marooneda heh ;P ale można też zrobić dwuwymiarową tablicę w tym cookiesu

1 użytkowników online, w tym zalogowanych: 0, gości: 1