t3sports - Spielbericht dynaMarkers (ohne Spielername und Kommentar "unbekannt" ausgeben) [Gelöst]

  • gonzales_maierle gonzales_...
    Padawan
    0 x
    61 Beiträge
    0 Hilfreiche Beiträge
    27. 09. 2011, 16:32

    Hallo zusammen,

    ich habe mir für die Anzeige von Torschützen, Auswechselungen und Karten jeweils einen dynaMarker zusammengebastelt.

    Im BE gehe ich so vor, dass ich bei meinem "eigenen" Team z.B. die Torschützen über das entsprechende Pull-Down auswähle (Aufstellung vorher dynamisch angelegt). Bei den Gegnern läuft die Aufstellung jedoch über das statische Eingabefeld. Somit habe ich bei deren Toren im Pull-Down nur die Möglichkeit "unbekannt" zu wählen. Da ich auf meiner Website die Torschützen jedoch nach Möglichkeit beim Namen nennen möchte, habe ich mir einen dynaMarker gebastelt, der bei unbekannten Torschützen den Inhalt des Kommentarfeldes ausgibt, in das ich den Namen eintrage.

    Der folgende Typoscript-Code enthält meinen DynaMarker für die Torschützen (Spielstandanzeige und Änderungen für das Gastteam hab ich mal rausgelassen, weil sie für das hiesige Problem irrelevant sein sollten)

    1. plugin.tx_cfcleaguefe_report.matchreport.match.dynaMarkers {
    2. # Die Heimtorschützen anzeigen
    3. scorerHome {
    4. cron = 1
    5. ifEmpty.cObject.value.field = scorer_home_stat
    6. ifEmpty.cObject.value.ifEmpty = <p class="score">Fehlanzeige</p>
    7. ifEmpty.cObject.value.br = 1
    8.  
    9. # Possible values are home and guest. Empty for both
    10. noteTeam = home
    11. noteType = 10,11,12,30
    12.  
    13. ticker {
    14. minute.s_weight = 2
    15. minute.wrap = <p class="score"><span>(|.) </span>
    16.  
    17. comment.s_weight = 4
    18. # Wrap nur, wenn nicht leer
    19. comment.stdWrap {
    20. wrap = <span>|</span>
    21. }
    22.  
    23. profile =< lib.t3sports.matchreport.profiles.profile
    24. # Wrap nur, wenn nicht leer
    25. profile.stdWrap {
    26. wrap = <span>|</span>
    27. }
    28. profile.s_weight = 3
    29. profile {
    30. last_name.cObject {
    31. -1 = COA
    32. -1 {
    33. 10 = TEXT
    34. 10.field = first_name
    35. 10.crop =
    36. 10.noTrimWrap = || |
    37. 10.required = 1
    38. 20 = COA
    39. 20 {
    40. 1 = TEXT
    41. 1.field = last_name
    42. 1.if {
    43. isInList.field = last_name
    44. value = unbekannt,Unknown
    45. negate = 1
    46. }
    47. 2 = TEXT
    48. 2.value =
    49. 2.if {
    50. isInList.field = last_name
    51. value = unbekannt,Unknown
    52. }
    53. }
    54. }
    55. }
    56. }
    57. }
    58. }
    59. }

    Jetzt kann es jedoch auch mal vorkommen, dass ich den entsprechenden Namen nicht in Erfahrung bringen kann. In diesem Fall soll dann nicht das leere Kommentarfeld ausgegeben werden, sondern "unbekannt".

    Mein Ansatz dafür sah vor das Feld comment an sich zu entfernen und es folgendermaßen in den Spielernamen zu integrieren.

    1. profile.s_weight = 3
    2. profile {
    3. last_name.cObject {
    4. -1 = COA
    5. -1 {
    6. 10 = TEXT
    7. 10.field = first_name
    8. 10.crop =
    9. 10.noTrimWrap = || |
    10. 10.required = 1
    11.  
    12. 20 = COA
    13. 20 {
    14. 10 = TEXT
    15. 10.field = last_name
    16. 10.if {
    17. isInList.field = last_name
    18. value = unbekannt,Unknown
    19. negate = 1
    20. }
    21.  
    22. 20 = COA
    23. 20 {
    24. 1 = TEXT
    25. 1.field = comment
    26. 1.if {
    27. isInList.field = comment
    28. empty.value
    29. negate = 1
    30. }
    31. }
    32. 20.if {
    33. isInList.field = last_name
    34. value = unbekannt,Unknown
    35. negate = 1
    36. }
    37.  
    38. 30 = COA
    39. 30 {
    40. 1 = TEXT
    41. 1.value = unbekannt
    42. 1.if {
    43. isInList.field = comment
    44. empty.value
    45. }
    46. }
    47. 30.if {
    48. isInList.field = last_name
    49. value = unbekannt,Unknown
    50. }
    51. }
    52. }
    53. }
    54. }

    Jedoch habe ich in profile keinen Zugriff auf das Feld comment der Tabelle match_notes.

    Wie komme ich jetzt zum Ziel?
    Gibt es eine Möglichkeit den Zugriff auf das nötige Feld hinzubekommen oder einen komplett anderen Ansatz? Ich bin für alles offen!

    Danke und Gruß
    Gonzales

    PS: Hoffe, dass alles verständlich ist. Wenn nicht, einfach nachfragen. ;)


  • 1
  • gonzales_maierle gonzales_...
    Padawan
    0 x
    61 Beiträge
    0 Hilfreiche Beiträge
    11. 10. 2011, 14:20

    Sry, aber ich muss das Ding hier mal wieder etwas nach vorne holen. ;)

  • gonzales_maierle gonzales_...
    Padawan
    0 x
    61 Beiträge
    0 Hilfreiche Beiträge
    28. 11. 2011, 18:05

    Habe es übrigens hinbekommen.

    Wenn ich diesen Ansatz jedoch auf die Auswechselungen anwenden möchte, bekomme ich – bei unbekannten Spielern (mit und ohne Kommentar) – für einen der beiden Spieler immer eine Fehlermeldung ("ERROR!" ). Dürfte vermutlich an Zeile 109ff der class.tx_cfcleaguefe_models_match_note.php liegen. Allerdings möchte ich ungern in den PHP-Code eingreifen (ist bei Updates immer nervig!).

    [b]@digedag:[/b] Könntest du in der nächsten Version die Möglichkeit den Kommentar zum 2. Spieler einzufügen integrieren? Oder bekommt man den irgendwie bereits jetzt per TS ergänzt? "comment2" funktioniert leider nicht.

    Hier meine Lösung zum Ausgangsproblem:

    1. plugin.tx_cfcleaguefe_report.matchreport.match.dynaMarkers {
    2. # Die Heimtorschützen anzeigen
    3. scorerHome {
    4. cron = 1
    5. ifEmpty.cObject.value.field = scorer_home_stat
    6. ifEmpty.cObject.value.ifEmpty = <p class="score">Fehlanzeige</p>
    7. ifEmpty.cObject.value.br = 1
    8.  
    9. # Possible values are home and guest. Empty for both
    10. noteTeam = home
    11. noteType = 10,11,12,30
    12.  
    13. ticker {
    14. minute.s_weight = 2
    15. minute.wrap = <p class="score"><span>(|.) </span>
    16.  
    17. comment.cObject = COA
    18. comment.cObject {
    19. 1 = TEXT
    20. 1.field = comment
    21. 1.if {
    22. isInList.field = comment
    23. empty.value
    24. negate = 1
    25. }
    26. 2 = TEXT
    27. 2.value = Unbekannt
    28. 2.if {
    29. value.field = player_home
    30. isGreaterThan = 0
    31. isTrue = 1
    32. isTrue.if {
    33. isInList.field = comment
    34. empty.value
    35. }
    36. }
    37. }
    38.  
    39. profile =< lib.t3sports.matchreport.profiles.profile
    40. # Wrap nur, wenn nicht leer
    41. profile.stdWrap {
    42. wrap = <span>|</span></p>
    43. }
    44.  
    45. profile.s_weight = 3
    46. profile {
    47. last_name.cObject {
    48. -1 = COA
    49. -1 {
    50. 10 = TEXT
    51. 10.field = first_name
    52. 10.crop =
    53. 10.noTrimWrap = || |
    54. 10.required = 1
    55. 20 = COA
    56. 20 {
    57. 1 = TEXT
    58. 1.field = last_name
    59. 1.if {
    60. isInList.field = last_name
    61. value = unbekannt,Unknown
    62. negate = 1
    63. }
    64. 2 = TEXT
    65. 2.value =
    66. 2.if {
    67. isInList.field = last_name
    68. value = unbekannt,Unknown
    69. }
    70. }
    71. }
    72. }
    73. }
    74. }
    75. }
    76. }

    So sieht's derzeit aus:
    http://dl.dropbox.com/u/8963152/t3sports_screen.jpg

    Gruß
    Gonzales

  • digedag digedag
    Jedi-Ratsmitglied
    0 x
    584 Beiträge
    3 Hilfreiche Beiträge
    17. 12. 2011, 13:17

    Hallo Gonzales,

    ich hab deine Lösung ausprobiert. Funktioniert sehr gut! Wär vielleicht was für's Wiki...

    Was die Auswechslungen angeht. Schau dir mal die Klasse tx_cfcleaguefe_util_MatchTicker und da die Methode _handleChange() an. Du findest da vier Zeilen, die ungefähr so aussehen:

    1. $change->record['player_home_2'] = $ticker->record['player_home'];

    Setz einfach mal jeweils folgende Zeile darunter:

    1. $change->record['comment2'] = $ticker->record['comment'];

    Damit solltest du Zugriff auf den Kommentar haben. Wenn es funktioniert, gib hier Bescheid und ich integriere es mit den Code! :)

  • gonzales_maierle gonzales_...
    Padawan
    0 x
    61 Beiträge
    0 Hilfreiche Beiträge
    17. 12. 2011, 19:08

    Würde soweit funktionieren. Jedoch darf der eingewechselte Spieler scheinbar nicht vom Typ "unbekannt" sein, da sonst der ERROR! ausgespuckt wird.

    [b]Kleines Beispiel:[/b] Wenn ich dem Team dynamisch die Spieler "unbekannter Spieler1" und "unbekannter Spieler2" zuordne, diese für die jeweiligen Aktionen wähle und in die Kommentare die echten Namen schreibe, würde es funktionieren. Ich Befürchte jedoch, dass ich für den 2. und 3. Wechsel noch die unbekannten Spieler 3, 4, 5 und 6 benötigen würde. Außerdem stehen in der Aufstellung dann diese fiktiven Spieler und nicht die in die statische Aufstellung eingetragenen. --> keine Lösung!

    Ich vermute, dass da Zeile 109ff der class.tx_cfcleaguefe_models_match_note.php etwas dagegen hat, steig aber noch nicht so ganz durch.

    [b]Auszug aus dem original Code (Z. 109ff):[/b]

    1. ...
    2.  
    3. // Bei Spielerwechseln gibt es noch ein zweites Profil
    4. $conf = $formatter->configurations->get($confId.'profile2.');
    5. if($conf && is_object($ticker) && $ticker->isChange()) {
    6. $player2 = $ticker->getPlayerChangeIn();
    7. if(!is_object($player2)) {
    8. // Hier liegt vermutlich ein Fehler bei der Dateneingabe vor
    9. // Es wird ein Hinweistext gezeigt
    10. $value = 'ERROR!';
    11. }
    12. else {
    13. $value = tx_cfcleaguefe_models_profile::wrap($formatter, $confId.'profile2.', $player2);
    14. }
    15. // $value = $player2->wrap($formatter, $conf['profile2.']);
    16. if(strlen($value) > 0) {
    17. $arr[] = array($value, $weights[] = $conf['s_weight'] ? intval($conf['s_weight']) : 0);
    18. $value = '';
    19. }
    20. }
    21. ...

    Wenn ich die IF-Abfrage rauslasse und nur den Part aus dem ELSE-Teil lasse, ist der Kommentar zumindest schon mal zweimal der gleiche (der vom ausgewechselten Spieler). :( ...
    Ich versuch noch ein wenig weiter, aber vielleicht bekommst du ja schneller was raus. ;)

    Gruß
    Gonzales

  • digedag digedag
    Jedi-Ratsmitglied
    0 x
    584 Beiträge
    3 Hilfreiche Beiträge
    21. 12. 2011, 12:07

    Also die Sache mit dem Kommentar ist in den Code übernommen. Für die Auswechslung wird der unbekannte Spieler natürlich nicht in der Datenbank gefunden. Daher der "ERROR!". Ersetze in der Klasse match_note mal die Methode _getPlayerChange($type) mit folgendem Code:

    1. function _getPlayerChange($type) {
    2. // Ist es ein Wechsel?
    3. if($this->isChange() && ($this->record['player_home'] || $this->record['player_guest'])) {
    4. // Heim oder Gast?
    5. if($this->record['player_home']) {
    6. $players = $this->match->getPlayersHome(1);
    7. $playerField = $this->record['type'] == '80' ?
    8. ($type ? 'player_home' : 'player_home_2') :
    9. ($type ? 'player_home_2' : 'player_home');
    10. }
    11. else {
    12. $players = $this->match->getPlayersGuest(1);
    13. $playerField = $this->record['type'] == '80' ?
    14. $type ? 'player_guest' : 'player_guest_2' :
    15. $type ? 'player_guest_2' : 'player_guest';
    16. }
    17. if($this->record[$playerField] < 0)
    18. return $this->getUnknownPlayer();
    19. return $players[$this->record[$playerField]];
    20. }
    21. }

    Damit ist wieder ein Spielerobjekt für die Ausgabe vorhanden und die Wraps sollten möglich sein.

  • gonzales_maierle gonzales_...
    Padawan
    0 x
    61 Beiträge
    0 Hilfreiche Beiträge
    22. 12. 2011, 17:59

    Hi digedag,

    ich hab den Code gerade mal schnell übernommen. Soweit, so gut.
    Jedoch klappt's erst 100%ig nach folgender Korrektur:
    Im else-Teil fehlen Klammern. Sonst wird bei den Gastwechseln für beide Spieler nur Profil 1 ausgegeben.

    1. else {
    2. $players = $this->match->getPlayersGuest(1);
    3. $playerField = $this->record['type'] == '80' ?
    4. ($type ? 'player_guest' : 'player_guest_2') :
    5. ($type ? 'player_guest_2' : 'player_guest');
    6. }

    Danach sollte alles einwandfrei funktionieren.

    ---

    Mein unaufgeräumtes TS für die Auswechselungen sieht jetzt folgendermaßen aus:

    1. #####################################################
    2. ### DynaMarker für Auswechselungen (Spielbericht) ###
    3. #####################################################
    4. plugin.tx_cfcleaguefe_report.matchreport.match.dynaMarkers {
    5. # Die Heim-Auswechselungen anzeigen
    6. substitutesHome {
    7. cron = 1
    8. ifEmpty.cObject.value.ifEmpty = <p class="substitute">unbekannt</p>
    9. ifEmpty.cObject.value.br = 1
    10.  
    11. # Possible values are home and guest. Empty for both
    12. noteTeam = home
    13. noteType = 80,81
    14. seperator = |<br/>|
    15. ticker {
    16. minute.s_weight = 0
    17. minute.wrap = (|.)&nbsp;
    18.  
    19. type.s_weight = 0
    20. # Typname nicht anzeigen
    21. type.cObject = CASE
    22. type.cObject {
    23. key.field = type
    24. default = TEXT
    25. default.value =
    26. }
    27. type.required = 1
    28. type.wrap = &nbsp;(|)
    29.  
    30. comment.s_weight = 4
    31. comment.cObject = COA
    32. comment.cObject {
    33. 1 = TEXT
    34. 1.field = comment
    35. 1.if {
    36. isInList.field = comment
    37. empty.value
    38. negate = 1
    39. }
    40. 2 = TEXT
    41. 2.value = Unbekannt
    42. 2.if {
    43. value.field = player_home
    44. isGreaterThan = 0
    45. isTrue = 1
    46. isTrue.if {
    47. isInList.field = comment
    48. empty.value
    49. }
    50. }
    51. }
    52.  
    53. comment2.s_weight = 2
    54. comment2 {
    55. #"für" hinter Kommentar schreiben, wenn dieser nicht leer
    56. wrap = |&nbsp;für&nbsp;
    57. if {
    58. isInList.field = comment
    59. empty.value
    60. negate = 1
    61. }
    62. }
    63.  
    64. profile =< lib.t3sports.matchreport.profiles.profile
    65. profile.s_weight = 3
    66. profile {
    67. last_name.cObject {
    68. -1 = COA
    69. -1 {
    70. #10 (Vorname) bleibt unverändert
    71. 20 = COA
    72. 20 {
    73. 1 = TEXT
    74. 1.field = last_name
    75. 1.if {
    76. isInList.field = last_name
    77. value = unbekannt,Unknown
    78. negate = 1
    79. }
    80. 2 = TEXT
    81. 2.value =
    82. 2.if {
    83. isInList.field = last_name
    84. value = unbekannt,Unknown
    85. }
    86. }
    87. }
    88. }
    89. }
    90.  
    91. # Bei Auswechslungen auch den zweiten Spieler zeigen
    92. profile2 =< lib.t3sports.matchreport.profiles.profile
    93. profile2 {
    94. s_weight = 1
    95. #"für" hinter den Namen schreiben, wenn Spieler nicht unbekannt
    96. wrap = |&nbsp;für&nbsp;
    97. if {
    98. isInList.field = last_name
    99. value = unbekannt,Unknown
    100. negate = 1
    101. }
    102. }
    103.  
    104. profile2 {
    105. last_name.cObject {
    106. -1 = COA
    107. -1 {
    108. #10 (Vorname) bleibt unverändert
    109. 20 = COA
    110. 20 {
    111. 1 = TEXT
    112. 1.field = last_name
    113. 1.if {
    114. isInList.field = last_name
    115. value = unbekannt,Unknown
    116. negate = 1
    117. }
    118. 2 = TEXT
    119. 2.value =
    120. 2.if {
    121. isInList.field = last_name
    122. value = unbekannt,Unknown
    123. }
    124. }
    125. }
    126. }
    127. }
    128. }
    129. }
    130.  
    131. # Änderungen für das Gastteam
    132. substitutesGuest =< plugin.tx_cfcleaguefe_report.matchreport.match.dynaMarkers.substitutesHome
    133. substitutesGuest {
    134. ifEmpty.cObject.value.field = substitutes_guest_stat
    135. noteTeam = guest
    136. ticker.profile.s_weight = 2
    137. ticker.minute.s_weight = 5
    138. ticker.minute.wrap = &nbsp;(|.)
    139. comment.cObject {
    140. 2.if {
    141. value.field = player_guest
    142. isGreaterThan = 0
    143. isTrue = 1
    144. isTrue.if {
    145. isInList.field = comment
    146. empty.value
    147. }
    148. }
    149. }
    150. }
    151. }

    [b]Vielen Dank für deine Hilfe![/b]
    Gruß Gonzales

  • 1